OLD | NEW |
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 2902 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2913 BitVector* doubles = chunk()->allocated_double_registers(); | 2913 BitVector* doubles = chunk()->allocated_double_registers(); |
2914 BitVector::Iterator save_iterator(doubles); | 2914 BitVector::Iterator save_iterator(doubles); |
2915 int count = 0; | 2915 int count = 0; |
2916 while (!save_iterator.Done()) { | 2916 while (!save_iterator.Done()) { |
2917 __ vldr(DwVfpRegister::FromAllocationIndex(save_iterator.Current()), | 2917 __ vldr(DwVfpRegister::FromAllocationIndex(save_iterator.Current()), |
2918 MemOperand(sp, count * kDoubleSize)); | 2918 MemOperand(sp, count * kDoubleSize)); |
2919 save_iterator.Advance(); | 2919 save_iterator.Advance(); |
2920 count++; | 2920 count++; |
2921 } | 2921 } |
2922 } | 2922 } |
| 2923 int no_frame_start = -1; |
2923 if (NeedsEagerFrame()) { | 2924 if (NeedsEagerFrame()) { |
2924 __ mov(sp, fp); | 2925 __ mov(sp, fp); |
2925 __ ldm(ia_w, sp, fp.bit() | lr.bit()); | 2926 __ ldm(ia_w, sp, fp.bit() | lr.bit()); |
| 2927 no_frame_start = masm_->pc_offset(); |
2926 } | 2928 } |
2927 if (instr->has_constant_parameter_count()) { | 2929 if (instr->has_constant_parameter_count()) { |
2928 int parameter_count = ToInteger32(instr->constant_parameter_count()); | 2930 int parameter_count = ToInteger32(instr->constant_parameter_count()); |
2929 int32_t sp_delta = (parameter_count + 1) * kPointerSize; | 2931 int32_t sp_delta = (parameter_count + 1) * kPointerSize; |
2930 if (sp_delta != 0) { | 2932 if (sp_delta != 0) { |
2931 __ add(sp, sp, Operand(sp_delta)); | 2933 __ add(sp, sp, Operand(sp_delta)); |
2932 } | 2934 } |
2933 } else { | 2935 } else { |
2934 Register reg = ToRegister(instr->parameter_count()); | 2936 Register reg = ToRegister(instr->parameter_count()); |
2935 // The argument count parameter is a smi | 2937 // The argument count parameter is a smi |
2936 __ SmiUntag(reg); | 2938 __ SmiUntag(reg); |
2937 __ add(sp, sp, Operand(reg, LSL, kPointerSizeLog2)); | 2939 __ add(sp, sp, Operand(reg, LSL, kPointerSizeLog2)); |
2938 } | 2940 } |
2939 | 2941 |
2940 __ Jump(lr); | 2942 __ Jump(lr); |
| 2943 |
| 2944 if (no_frame_start != -1) { |
| 2945 info_->AddNoFrameRange(no_frame_start, masm_->pc_offset()); |
| 2946 } |
2941 } | 2947 } |
2942 | 2948 |
2943 | 2949 |
2944 void LCodeGen::DoLoadGlobalCell(LLoadGlobalCell* instr) { | 2950 void LCodeGen::DoLoadGlobalCell(LLoadGlobalCell* instr) { |
2945 Register result = ToRegister(instr->result()); | 2951 Register result = ToRegister(instr->result()); |
2946 __ mov(ip, Operand(Handle<Object>(instr->hydrogen()->cell()))); | 2952 __ mov(ip, Operand(Handle<Object>(instr->hydrogen()->cell()))); |
2947 __ ldr(result, FieldMemOperand(ip, JSGlobalPropertyCell::kValueOffset)); | 2953 __ ldr(result, FieldMemOperand(ip, JSGlobalPropertyCell::kValueOffset)); |
2948 if (instr->hydrogen()->RequiresHoleCheck()) { | 2954 if (instr->hydrogen()->RequiresHoleCheck()) { |
2949 __ LoadRoot(ip, Heap::kTheHoleValueRootIndex); | 2955 __ LoadRoot(ip, Heap::kTheHoleValueRootIndex); |
2950 __ cmp(result, ip); | 2956 __ cmp(result, ip); |
(...skipping 3090 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6041 __ sub(scratch, result, Operand(index, LSL, kPointerSizeLog2 - kSmiTagSize)); | 6047 __ sub(scratch, result, Operand(index, LSL, kPointerSizeLog2 - kSmiTagSize)); |
6042 __ ldr(result, FieldMemOperand(scratch, | 6048 __ ldr(result, FieldMemOperand(scratch, |
6043 FixedArray::kHeaderSize - kPointerSize)); | 6049 FixedArray::kHeaderSize - kPointerSize)); |
6044 __ bind(&done); | 6050 __ bind(&done); |
6045 } | 6051 } |
6046 | 6052 |
6047 | 6053 |
6048 #undef __ | 6054 #undef __ |
6049 | 6055 |
6050 } } // namespace v8::internal | 6056 } } // namespace v8::internal |
OLD | NEW |