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 981 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
992 } | 992 } |
993 } | 993 } |
994 | 994 |
995 | 995 |
996 void LCodeGen::DoUnknownOSRValue(LUnknownOSRValue* instr) { | 996 void LCodeGen::DoUnknownOSRValue(LUnknownOSRValue* instr) { |
997 // Nothing to do. | 997 // Nothing to do. |
998 } | 998 } |
999 | 999 |
1000 | 1000 |
1001 void LCodeGen::DoModI(LModI* instr) { | 1001 void LCodeGen::DoModI(LModI* instr) { |
1002 Abort("ModI not implemented"); | |
1002 class DeferredModI: public LDeferredCode { | 1003 class DeferredModI: public LDeferredCode { |
1003 public: | 1004 public: |
1004 DeferredModI(LCodeGen* codegen, LModI* instr) | 1005 DeferredModI(LCodeGen* codegen, LModI* instr) |
1005 : LDeferredCode(codegen), instr_(instr) { } | 1006 : LDeferredCode(codegen), instr_(instr) { } |
1006 virtual void Generate() { | 1007 virtual void Generate() { |
1007 codegen()->DoDeferredGenericBinaryStub(instr_, Token::MOD); | 1008 codegen()->DoDeferredGenericBinaryStub(instr_, Token::MOD); |
1008 } | 1009 } |
1009 private: | 1010 private: |
1010 LModI* instr_; | 1011 LModI* instr_; |
1011 }; | 1012 }; |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1047 __ mov(result, Operand(result, ASR, 1)); | 1048 __ mov(result, Operand(result, ASR, 1)); |
1048 | 1049 |
1049 __ b(al, &done); | 1050 __ b(al, &done); |
1050 __ bind(&deoptimize); | 1051 __ bind(&deoptimize); |
1051 DeoptimizeIf(al, instr->environment()); | 1052 DeoptimizeIf(al, instr->environment()); |
1052 __ bind(&done); | 1053 __ bind(&done); |
1053 } | 1054 } |
1054 | 1055 |
1055 | 1056 |
1056 void LCodeGen::DoDivI(LDivI* instr) { | 1057 void LCodeGen::DoDivI(LDivI* instr) { |
1058 Abort("DivI not implemented"); | |
1057 class DeferredDivI: public LDeferredCode { | 1059 class DeferredDivI: public LDeferredCode { |
1058 public: | 1060 public: |
1059 DeferredDivI(LCodeGen* codegen, LDivI* instr) | 1061 DeferredDivI(LCodeGen* codegen, LDivI* instr) |
1060 : LDeferredCode(codegen), instr_(instr) { } | 1062 : LDeferredCode(codegen), instr_(instr) { } |
1061 virtual void Generate() { | 1063 virtual void Generate() { |
1062 codegen()->DoDeferredGenericBinaryStub(instr_, Token::DIV); | 1064 codegen()->DoDeferredGenericBinaryStub(instr_, Token::DIV); |
1063 } | 1065 } |
1064 private: | 1066 private: |
1065 LDivI* instr_; | 1067 LDivI* instr_; |
1066 }; | 1068 }; |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1134 | 1136 |
1135 | 1137 |
1136 void LCodeGen::DoDeferredGenericBinaryStub(LBinaryOperation* instr, | 1138 void LCodeGen::DoDeferredGenericBinaryStub(LBinaryOperation* instr, |
1137 Token::Value op) { | 1139 Token::Value op) { |
1138 Register left = ToRegister(instr->left()); | 1140 Register left = ToRegister(instr->left()); |
1139 Register right = ToRegister(instr->right()); | 1141 Register right = ToRegister(instr->right()); |
1140 | 1142 |
1141 __ PushSafepointRegistersAndDoubles(); | 1143 __ PushSafepointRegistersAndDoubles(); |
1142 GenericBinaryOpStub stub(op, OVERWRITE_LEFT, left, right); | 1144 GenericBinaryOpStub stub(op, OVERWRITE_LEFT, left, right); |
1143 __ CallStub(&stub); | 1145 __ CallStub(&stub); |
1144 RecordSafepointWithRegisters(instr->pointer_map(), | 1146 RecordSafepointWithRegistersAndDoubles(instr->pointer_map(), |
Søren Thygesen Gjesse
2011/01/14 15:02:43
Using safepoint with registers and doubles here do
| |
1145 0, | 1147 0, |
1146 Safepoint::kNoDeoptimizationIndex); | 1148 Safepoint::kNoDeoptimizationIndex); |
1147 // Overwrite the stored value of r0 with the result of the stub. | 1149 // Overwrite the stored value of r0 with the result of the stub. |
1148 __ str(r0, MemOperand(sp, DwVfpRegister::kNumAllocatableRegisters * | 1150 __ str(r0, MemOperand(sp, DwVfpRegister::kNumAllocatableRegisters * |
1149 kDoubleSize)); | 1151 kDoubleSize)); |
1150 __ PopSafepointRegistersAndDoubles(); | 1152 __ PopSafepointRegistersAndDoubles(); |
1151 } | 1153 } |
1152 | 1154 |
1153 | 1155 |
1154 void LCodeGen::DoMulI(LMulI* instr) { | 1156 void LCodeGen::DoMulI(LMulI* instr) { |
1155 Register scratch = scratch0(); | 1157 Register scratch = scratch0(); |
1156 Register left = ToRegister(instr->left()); | 1158 Register left = ToRegister(instr->left()); |
(...skipping 2020 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3177 | 3179 |
3178 | 3180 |
3179 void LCodeGen::DoOsrEntry(LOsrEntry* instr) { | 3181 void LCodeGen::DoOsrEntry(LOsrEntry* instr) { |
3180 Abort("DoOsrEntry unimplemented."); | 3182 Abort("DoOsrEntry unimplemented."); |
3181 } | 3183 } |
3182 | 3184 |
3183 | 3185 |
3184 #undef __ | 3186 #undef __ |
3185 | 3187 |
3186 } } // namespace v8::internal | 3188 } } // namespace v8::internal |
OLD | NEW |