Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(21)

Side by Side Diff: src/arm/macro-assembler-arm.cc

Issue 70093002: Remove unused LoadNumber* from ARM macro assembler. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 840 matching lines...) Expand 10 before | Expand all | Expand 10 after
851 void MacroAssembler::VmovLow(DwVfpRegister dst, Register src) { 851 void MacroAssembler::VmovLow(DwVfpRegister dst, Register src) {
852 if (dst.code() < 16) { 852 if (dst.code() < 16) {
853 const LowDwVfpRegister loc = LowDwVfpRegister::from_code(dst.code()); 853 const LowDwVfpRegister loc = LowDwVfpRegister::from_code(dst.code());
854 vmov(loc.low(), src); 854 vmov(loc.low(), src);
855 } else { 855 } else {
856 vmov(dst, VmovIndexLo, src); 856 vmov(dst, VmovIndexLo, src);
857 } 857 }
858 } 858 }
859 859
860 860
861 void MacroAssembler::LoadNumber(Register object,
862 LowDwVfpRegister dst,
863 Register heap_number_map,
864 Register scratch,
865 Label* not_number) {
866 Label is_smi, done;
867
868 UntagAndJumpIfSmi(scratch, object, &is_smi);
869 JumpIfNotHeapNumber(object, heap_number_map, scratch, not_number);
870
871 vldr(dst, FieldMemOperand(object, HeapNumber::kValueOffset));
872 b(&done);
873
874 // Handle loading a double from a smi.
875 bind(&is_smi);
876 vmov(dst.high(), scratch);
877 vcvt_f64_s32(dst, dst.high());
878
879 bind(&done);
880 }
881
882
883 void MacroAssembler::LoadNumberAsInt32Double(Register object,
884 DwVfpRegister double_dst,
885 Register heap_number_map,
886 Register scratch,
887 LowDwVfpRegister double_scratch,
888 Label* not_int32) {
889 ASSERT(!scratch.is(object));
890 ASSERT(!heap_number_map.is(object) && !heap_number_map.is(scratch));
891
892 Label done, obj_is_not_smi;
893
894 UntagAndJumpIfNotSmi(scratch, object, &obj_is_not_smi);
895 vmov(double_scratch.low(), scratch);
896 vcvt_f64_s32(double_dst, double_scratch.low());
897 b(&done);
898
899 bind(&obj_is_not_smi);
900 JumpIfNotHeapNumber(object, heap_number_map, scratch, not_int32);
901
902 // Load the number.
903 // Load the double value.
904 vldr(double_dst, FieldMemOperand(object, HeapNumber::kValueOffset));
905
906 TestDoubleIsInt32(double_dst, double_scratch);
907 // Jump to not_int32 if the operation did not succeed.
908 b(ne, not_int32);
909
910 bind(&done);
911 }
912
913
914 void MacroAssembler::LoadNumberAsInt32(Register object,
915 Register dst,
916 Register heap_number_map,
917 Register scratch,
918 DwVfpRegister double_scratch0,
919 LowDwVfpRegister double_scratch1,
920 Label* not_int32) {
921 ASSERT(!dst.is(object));
922 ASSERT(!scratch.is(object));
923
924 Label done, maybe_undefined;
925
926 UntagAndJumpIfSmi(dst, object, &done);
927
928 JumpIfNotHeapNumber(object, heap_number_map, scratch, &maybe_undefined);
929
930 // Object is a heap number.
931 // Convert the floating point value to a 32-bit integer.
932 // Load the double value.
933 vldr(double_scratch0, FieldMemOperand(object, HeapNumber::kValueOffset));
934
935 TryDoubleToInt32Exact(dst, double_scratch0, double_scratch1);
936 // Jump to not_int32 if the operation did not succeed.
937 b(ne, not_int32);
938 b(&done);
939
940 bind(&maybe_undefined);
941 CompareRoot(object, Heap::kUndefinedValueRootIndex);
942 b(ne, not_int32);
943 // |undefined| is truncated to 0.
944 mov(dst, Operand(Smi::FromInt(0)));
945 // Fall through.
946
947 bind(&done);
948 }
949
950
951 void MacroAssembler::Prologue(PrologueFrameMode frame_mode) { 861 void MacroAssembler::Prologue(PrologueFrameMode frame_mode) {
952 if (frame_mode == BUILD_STUB_FRAME) { 862 if (frame_mode == BUILD_STUB_FRAME) {
953 stm(db_w, sp, cp.bit() | fp.bit() | lr.bit()); 863 stm(db_w, sp, cp.bit() | fp.bit() | lr.bit());
954 Push(Smi::FromInt(StackFrame::STUB)); 864 Push(Smi::FromInt(StackFrame::STUB));
955 // Adjust FP to point to saved FP. 865 // Adjust FP to point to saved FP.
956 add(fp, sp, Operand(2 * kPointerSize)); 866 add(fp, sp, Operand(2 * kPointerSize));
957 } else { 867 } else {
958 PredictableCodeSizeScope predictible_code_size_scope( 868 PredictableCodeSizeScope predictible_code_size_scope(
959 this, kNoCodeAgeSequenceLength * Assembler::kInstrSize); 869 this, kNoCodeAgeSequenceLength * Assembler::kInstrSize);
960 // The following three instructions must remain together and unmodified 870 // The following three instructions must remain together and unmodified
(...skipping 3089 matching lines...) Expand 10 before | Expand all | Expand 10 after
4050 void CodePatcher::EmitCondition(Condition cond) { 3960 void CodePatcher::EmitCondition(Condition cond) {
4051 Instr instr = Assembler::instr_at(masm_.pc_); 3961 Instr instr = Assembler::instr_at(masm_.pc_);
4052 instr = (instr & ~kCondMask) | cond; 3962 instr = (instr & ~kCondMask) | cond;
4053 masm_.emit(instr); 3963 masm_.emit(instr);
4054 } 3964 }
4055 3965
4056 3966
4057 } } // namespace v8::internal 3967 } } // namespace v8::internal
4058 3968
4059 #endif // V8_TARGET_ARCH_ARM 3969 #endif // V8_TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698