| OLD | NEW |
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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 708 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 719 __ Branch(&done, eq, int_scratch, Operand(zero_reg)); | 719 __ Branch(&done, eq, int_scratch, Operand(zero_reg)); |
| 720 | 720 |
| 721 // Preload the sign of the value. | 721 // Preload the sign of the value. |
| 722 __ And(dst2, int_scratch, Operand(HeapNumber::kSignMask)); | 722 __ And(dst2, int_scratch, Operand(HeapNumber::kSignMask)); |
| 723 // Get the absolute value of the object (as an unsigned integer). | 723 // Get the absolute value of the object (as an unsigned integer). |
| 724 Label skip_sub; | 724 Label skip_sub; |
| 725 __ Branch(&skip_sub, ge, dst2, Operand(zero_reg)); | 725 __ Branch(&skip_sub, ge, dst2, Operand(zero_reg)); |
| 726 __ Subu(int_scratch, zero_reg, int_scratch); | 726 __ Subu(int_scratch, zero_reg, int_scratch); |
| 727 __ bind(&skip_sub); | 727 __ bind(&skip_sub); |
| 728 | 728 |
| 729 // Get mantisssa[51:20]. | 729 // Get mantissa[51:20]. |
| 730 | 730 |
| 731 // Get the position of the first set bit. | 731 // Get the position of the first set bit. |
| 732 __ clz(dst1, int_scratch); | 732 __ clz(dst1, int_scratch); |
| 733 __ li(scratch2, 31); | 733 __ li(scratch2, 31); |
| 734 __ Subu(dst1, scratch2, dst1); | 734 __ Subu(dst1, scratch2, dst1); |
| 735 | 735 |
| 736 // Set the exponent. | 736 // Set the exponent. |
| 737 __ Addu(scratch2, dst1, Operand(HeapNumber::kExponentBias)); | 737 __ Addu(scratch2, dst1, Operand(HeapNumber::kExponentBias)); |
| 738 __ Ins(dst2, scratch2, | 738 __ Ins(dst2, scratch2, |
| 739 HeapNumber::kExponentShift, HeapNumber::kExponentBits); | 739 HeapNumber::kExponentShift, HeapNumber::kExponentBits); |
| (...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 964 __ subu(tmp, scratch, at); | 964 __ subu(tmp, scratch, at); |
| 965 __ Branch(not_int32, gt, tmp, Operand(30)); | 965 __ Branch(not_int32, gt, tmp, Operand(30)); |
| 966 // - Bits [21:0] in the mantissa are not null. | 966 // - Bits [21:0] in the mantissa are not null. |
| 967 __ And(tmp, src2, 0x3fffff); | 967 __ And(tmp, src2, 0x3fffff); |
| 968 __ Branch(not_int32, ne, tmp, Operand(zero_reg)); | 968 __ Branch(not_int32, ne, tmp, Operand(zero_reg)); |
| 969 | 969 |
| 970 // Otherwise the exponent needs to be big enough to shift left all the | 970 // Otherwise the exponent needs to be big enough to shift left all the |
| 971 // non zero bits left. So we need the (30 - exponent) last bits of the | 971 // non zero bits left. So we need the (30 - exponent) last bits of the |
| 972 // 31 higher bits of the mantissa to be null. | 972 // 31 higher bits of the mantissa to be null. |
| 973 // Because bits [21:0] are null, we can check instead that the | 973 // Because bits [21:0] are null, we can check instead that the |
| 974 // (32 - exponent) last bits of the 32 higher bits of the mantisssa are null. | 974 // (32 - exponent) last bits of the 32 higher bits of the mantissa are null. |
| 975 | 975 |
| 976 // Get the 32 higher bits of the mantissa in dst. | 976 // Get the 32 higher bits of the mantissa in dst. |
| 977 __ Ext(dst, | 977 __ Ext(dst, |
| 978 src2, | 978 src2, |
| 979 HeapNumber::kMantissaBitsInTopWord, | 979 HeapNumber::kMantissaBitsInTopWord, |
| 980 32 - HeapNumber::kMantissaBitsInTopWord); | 980 32 - HeapNumber::kMantissaBitsInTopWord); |
| 981 __ sll(at, src1, HeapNumber::kNonMantissaBitsInTopWord); | 981 __ sll(at, src1, HeapNumber::kNonMantissaBitsInTopWord); |
| 982 __ or_(dst, dst, at); | 982 __ or_(dst, dst, at); |
| 983 | 983 |
| 984 // Create the mask and test the lower bits (of the higher bits). | 984 // Create the mask and test the lower bits (of the higher bits). |
| (...skipping 3707 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4692 __ Addu(t5, t5, Operand(Smi::FromInt(1))); | 4692 __ Addu(t5, t5, Operand(Smi::FromInt(1))); |
| 4693 | 4693 |
| 4694 __ bind(&arguments_test); | 4694 __ bind(&arguments_test); |
| 4695 __ Branch(&arguments_loop, lt, t5, Operand(a2)); | 4695 __ Branch(&arguments_loop, lt, t5, Operand(a2)); |
| 4696 | 4696 |
| 4697 // Return and remove the on-stack parameters. | 4697 // Return and remove the on-stack parameters. |
| 4698 __ Addu(sp, sp, Operand(3 * kPointerSize)); | 4698 __ Addu(sp, sp, Operand(3 * kPointerSize)); |
| 4699 __ Ret(); | 4699 __ Ret(); |
| 4700 | 4700 |
| 4701 // Do the runtime call to allocate the arguments object. | 4701 // Do the runtime call to allocate the arguments object. |
| 4702 // a2 = argument count (taggged) | 4702 // a2 = argument count (tagged) |
| 4703 __ bind(&runtime); | 4703 __ bind(&runtime); |
| 4704 __ sw(a2, MemOperand(sp, 0 * kPointerSize)); // Patch argument count. | 4704 __ sw(a2, MemOperand(sp, 0 * kPointerSize)); // Patch argument count. |
| 4705 __ TailCallRuntime(Runtime::kNewArgumentsFast, 3, 1); | 4705 __ TailCallRuntime(Runtime::kNewArgumentsFast, 3, 1); |
| 4706 } | 4706 } |
| 4707 | 4707 |
| 4708 | 4708 |
| 4709 void ArgumentsAccessStub::GenerateNewStrict(MacroAssembler* masm) { | 4709 void ArgumentsAccessStub::GenerateNewStrict(MacroAssembler* masm) { |
| 4710 // sp[0] : number of parameters | 4710 // sp[0] : number of parameters |
| 4711 // sp[4] : receiver displacement | 4711 // sp[4] : receiver displacement |
| 4712 // sp[8] : function | 4712 // sp[8] : function |
| (...skipping 2868 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7581 __ Ret(USE_DELAY_SLOT); | 7581 __ Ret(USE_DELAY_SLOT); |
| 7582 __ mov(v0, a0); | 7582 __ mov(v0, a0); |
| 7583 } | 7583 } |
| 7584 | 7584 |
| 7585 | 7585 |
| 7586 #undef __ | 7586 #undef __ |
| 7587 | 7587 |
| 7588 } } // namespace v8::internal | 7588 } } // namespace v8::internal |
| 7589 | 7589 |
| 7590 #endif // V8_TARGET_ARCH_MIPS | 7590 #endif // V8_TARGET_ARCH_MIPS |
| OLD | NEW |