| OLD | NEW |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef V8_S390_MACRO_ASSEMBLER_S390_H_ | 5 #ifndef V8_S390_MACRO_ASSEMBLER_S390_H_ |
| 6 #define V8_S390_MACRO_ASSEMBLER_S390_H_ | 6 #define V8_S390_MACRO_ASSEMBLER_S390_H_ |
| 7 | 7 |
| 8 #include "src/assembler.h" | 8 #include "src/assembler.h" |
| 9 #include "src/bailout-reason.h" | 9 #include "src/bailout-reason.h" |
| 10 #include "src/frames.h" | 10 #include "src/frames.h" |
| (...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 346 void LoadAndTestP(Register dst, Register src); | 346 void LoadAndTestP(Register dst, Register src); |
| 347 | 347 |
| 348 void LoadAndTest32(Register dst, const MemOperand& opnd); | 348 void LoadAndTest32(Register dst, const MemOperand& opnd); |
| 349 void LoadAndTestP(Register dst, const MemOperand& opnd); | 349 void LoadAndTestP(Register dst, const MemOperand& opnd); |
| 350 | 350 |
| 351 // Load Floating Point | 351 // Load Floating Point |
| 352 void LoadDouble(DoubleRegister dst, const MemOperand& opnd); | 352 void LoadDouble(DoubleRegister dst, const MemOperand& opnd); |
| 353 void LoadFloat32(DoubleRegister dst, const MemOperand& opnd); | 353 void LoadFloat32(DoubleRegister dst, const MemOperand& opnd); |
| 354 void LoadFloat32ConvertToDouble(DoubleRegister dst, const MemOperand& mem); | 354 void LoadFloat32ConvertToDouble(DoubleRegister dst, const MemOperand& mem); |
| 355 | 355 |
| 356 // Load On Condition |
| 357 void LoadOnConditionP(Condition cond, Register dst, Register src); |
| 358 |
| 356 // Store Floating Point | 359 // Store Floating Point |
| 357 void StoreDouble(DoubleRegister dst, const MemOperand& opnd); | 360 void StoreDouble(DoubleRegister dst, const MemOperand& opnd); |
| 358 void StoreFloat32(DoubleRegister dst, const MemOperand& opnd); | 361 void StoreFloat32(DoubleRegister dst, const MemOperand& opnd); |
| 359 void StoreDoubleAsFloat32(DoubleRegister src, const MemOperand& mem, | 362 void StoreDoubleAsFloat32(DoubleRegister src, const MemOperand& mem, |
| 360 DoubleRegister scratch); | 363 DoubleRegister scratch); |
| 361 | 364 |
| 362 void Branch(Condition c, const Operand& opnd); | 365 void Branch(Condition c, const Operand& opnd); |
| 363 void BranchOnCount(Register r1, Label* l); | 366 void BranchOnCount(Register r1, Label* l); |
| 364 | 367 |
| 365 // Shifts | 368 // Shifts |
| (...skipping 853 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1219 void TruncateHeapNumberToI(Register result, Register object); | 1222 void TruncateHeapNumberToI(Register result, Register object); |
| 1220 | 1223 |
| 1221 // Converts the smi or heap number in object to an int32 using the rules | 1224 // Converts the smi or heap number in object to an int32 using the rules |
| 1222 // for ToInt32 as described in ECMAScript 9.5.: the value is truncated | 1225 // for ToInt32 as described in ECMAScript 9.5.: the value is truncated |
| 1223 // and brought into the range -2^31 .. +2^31 - 1. 'result' and 'input' must be | 1226 // and brought into the range -2^31 .. +2^31 - 1. 'result' and 'input' must be |
| 1224 // different registers. | 1227 // different registers. |
| 1225 void TruncateNumberToI(Register object, Register result, | 1228 void TruncateNumberToI(Register object, Register result, |
| 1226 Register heap_number_map, Register scratch1, | 1229 Register heap_number_map, Register scratch1, |
| 1227 Label* not_int32); | 1230 Label* not_int32); |
| 1228 | 1231 |
| 1229 // Overflow handling functions. | |
| 1230 // Usage: call the appropriate arithmetic function and then call one of the | |
| 1231 // flow control functions with the corresponding label. | |
| 1232 | |
| 1233 // Compute dst = left + right, setting condition codes. dst may be same as | |
| 1234 // either left or right (or a unique register). left and right must not be | |
| 1235 // the same register. | |
| 1236 void AddAndCheckForOverflow(Register dst, Register left, Register right, | |
| 1237 Register overflow_dst, Register scratch = r0); | |
| 1238 void AddAndCheckForOverflow(Register dst, Register left, intptr_t right, | |
| 1239 Register overflow_dst, Register scratch = r0); | |
| 1240 | |
| 1241 // Compute dst = left - right, setting condition codes. dst may be same as | |
| 1242 // either left or right (or a unique register). left and right must not be | |
| 1243 // the same register. | |
| 1244 void SubAndCheckForOverflow(Register dst, Register left, Register right, | |
| 1245 Register overflow_dst, Register scratch = r0); | |
| 1246 | |
| 1247 void BranchOnOverflow(Label* label) { blt(label /*, cr0*/); } | |
| 1248 | |
| 1249 void BranchOnNoOverflow(Label* label) { bge(label /*, cr0*/); } | |
| 1250 | |
| 1251 void RetOnOverflow(void) { | |
| 1252 Label label; | |
| 1253 | |
| 1254 blt(&label /*, cr0*/); | |
| 1255 Ret(); | |
| 1256 bind(&label); | |
| 1257 } | |
| 1258 | |
| 1259 void RetOnNoOverflow(void) { | |
| 1260 Label label; | |
| 1261 | |
| 1262 bge(&label /*, cr0*/); | |
| 1263 Ret(); | |
| 1264 bind(&label); | |
| 1265 } | |
| 1266 | |
| 1267 // --------------------------------------------------------------------------- | 1232 // --------------------------------------------------------------------------- |
| 1268 // Runtime calls | 1233 // Runtime calls |
| 1269 | 1234 |
| 1270 // Call a code stub. | 1235 // Call a code stub. |
| 1271 void CallStub(CodeStub* stub, TypeFeedbackId ast_id = TypeFeedbackId::None(), | 1236 void CallStub(CodeStub* stub, TypeFeedbackId ast_id = TypeFeedbackId::None(), |
| 1272 Condition cond = al); | 1237 Condition cond = al); |
| 1273 | 1238 |
| 1274 // Call a code stub. | 1239 // Call a code stub. |
| 1275 void TailCallStub(CodeStub* stub, Condition cond = al); | 1240 void TailCallStub(CodeStub* stub, Condition cond = al); |
| 1276 | 1241 |
| (...skipping 633 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1910 inline MemOperand NativeContextMemOperand() { | 1875 inline MemOperand NativeContextMemOperand() { |
| 1911 return ContextMemOperand(cp, Context::NATIVE_CONTEXT_INDEX); | 1876 return ContextMemOperand(cp, Context::NATIVE_CONTEXT_INDEX); |
| 1912 } | 1877 } |
| 1913 | 1878 |
| 1914 #define ACCESS_MASM(masm) masm-> | 1879 #define ACCESS_MASM(masm) masm-> |
| 1915 | 1880 |
| 1916 } // namespace internal | 1881 } // namespace internal |
| 1917 } // namespace v8 | 1882 } // namespace v8 |
| 1918 | 1883 |
| 1919 #endif // V8_S390_MACRO_ASSEMBLER_S390_H_ | 1884 #endif // V8_S390_MACRO_ASSEMBLER_S390_H_ |
| OLD | NEW |