OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
2 // | 2 // |
3 // Redistribution and use in source and binary forms, with or without | 3 // Redistribution and use in source and binary forms, with or without |
4 // modification, are permitted provided that the following conditions are | 4 // modification, are permitted provided that the following conditions are |
5 // met: | 5 // met: |
6 // | 6 // |
7 // * Redistributions of source code must retain the above copyright | 7 // * Redistributions of source code must retain the above copyright |
8 // notice, this list of conditions and the following disclaimer. | 8 // notice, this list of conditions and the following disclaimer. |
9 // * Redistributions in binary form must reproduce the above | 9 // * Redistributions in binary form must reproduce the above |
10 // copyright notice, this list of conditions and the following | 10 // copyright notice, this list of conditions and the following |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
103 } else if (type() == CPURegister::kFPRegister) { | 103 } else if (type() == CPURegister::kFPRegister) { |
104 Remove(GetCalleeSavedFP(RegisterSizeInBits())); | 104 Remove(GetCalleeSavedFP(RegisterSizeInBits())); |
105 } else { | 105 } else { |
106 DCHECK(type() == CPURegister::kNoRegister); | 106 DCHECK(type() == CPURegister::kNoRegister); |
107 DCHECK(IsEmpty()); | 107 DCHECK(IsEmpty()); |
108 // The list must already be empty, so do nothing. | 108 // The list must already be empty, so do nothing. |
109 } | 109 } |
110 } | 110 } |
111 | 111 |
112 | 112 |
113 CPURegList CPURegList::GetCalleeSaved(unsigned size) { | 113 CPURegList CPURegList::GetCalleeSaved(int size) { |
114 return CPURegList(CPURegister::kRegister, size, 19, 29); | 114 return CPURegList(CPURegister::kRegister, size, 19, 29); |
115 } | 115 } |
116 | 116 |
117 | 117 |
118 CPURegList CPURegList::GetCalleeSavedFP(unsigned size) { | 118 CPURegList CPURegList::GetCalleeSavedFP(int size) { |
119 return CPURegList(CPURegister::kFPRegister, size, 8, 15); | 119 return CPURegList(CPURegister::kFPRegister, size, 8, 15); |
120 } | 120 } |
121 | 121 |
122 | 122 |
123 CPURegList CPURegList::GetCallerSaved(unsigned size) { | 123 CPURegList CPURegList::GetCallerSaved(int size) { |
124 // Registers x0-x18 and lr (x30) are caller-saved. | 124 // Registers x0-x18 and lr (x30) are caller-saved. |
125 CPURegList list = CPURegList(CPURegister::kRegister, size, 0, 18); | 125 CPURegList list = CPURegList(CPURegister::kRegister, size, 0, 18); |
126 list.Combine(lr); | 126 list.Combine(lr); |
127 return list; | 127 return list; |
128 } | 128 } |
129 | 129 |
130 | 130 |
131 CPURegList CPURegList::GetCallerSavedFP(unsigned size) { | 131 CPURegList CPURegList::GetCallerSavedFP(int size) { |
132 // Registers d0-d7 and d16-d31 are caller-saved. | 132 // Registers d0-d7 and d16-d31 are caller-saved. |
133 CPURegList list = CPURegList(CPURegister::kFPRegister, size, 0, 7); | 133 CPURegList list = CPURegList(CPURegister::kFPRegister, size, 0, 7); |
134 list.Combine(CPURegList(CPURegister::kFPRegister, size, 16, 31)); | 134 list.Combine(CPURegList(CPURegister::kFPRegister, size, 16, 31)); |
135 return list; | 135 return list; |
136 } | 136 } |
137 | 137 |
138 | 138 |
139 // This function defines the list of registers which are associated with a | 139 // This function defines the list of registers which are associated with a |
140 // safepoint slot. Safepoint register slots are saved contiguously on the stack. | 140 // safepoint slot. Safepoint register slots are saved contiguously on the stack. |
141 // MacroAssembler::SafepointRegisterStackIndex handles mapping from register | 141 // MacroAssembler::SafepointRegisterStackIndex handles mapping from register |
(...skipping 1129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1271 void Assembler::rorv(const Register& rd, | 1271 void Assembler::rorv(const Register& rd, |
1272 const Register& rn, | 1272 const Register& rn, |
1273 const Register& rm) { | 1273 const Register& rm) { |
1274 DCHECK(rd.SizeInBits() == rn.SizeInBits()); | 1274 DCHECK(rd.SizeInBits() == rn.SizeInBits()); |
1275 DCHECK(rd.SizeInBits() == rm.SizeInBits()); | 1275 DCHECK(rd.SizeInBits() == rm.SizeInBits()); |
1276 Emit(SF(rd) | RORV | Rm(rm) | Rn(rn) | Rd(rd)); | 1276 Emit(SF(rd) | RORV | Rm(rm) | Rn(rn) | Rd(rd)); |
1277 } | 1277 } |
1278 | 1278 |
1279 | 1279 |
1280 // Bitfield operations. | 1280 // Bitfield operations. |
1281 void Assembler::bfm(const Register& rd, | 1281 void Assembler::bfm(const Register& rd, const Register& rn, int immr, |
1282 const Register& rn, | 1282 int imms) { |
1283 unsigned immr, | |
1284 unsigned imms) { | |
1285 DCHECK(rd.SizeInBits() == rn.SizeInBits()); | 1283 DCHECK(rd.SizeInBits() == rn.SizeInBits()); |
1286 Instr N = SF(rd) >> (kSFOffset - kBitfieldNOffset); | 1284 Instr N = SF(rd) >> (kSFOffset - kBitfieldNOffset); |
1287 Emit(SF(rd) | BFM | N | | 1285 Emit(SF(rd) | BFM | N | |
1288 ImmR(immr, rd.SizeInBits()) | | 1286 ImmR(immr, rd.SizeInBits()) | |
1289 ImmS(imms, rn.SizeInBits()) | | 1287 ImmS(imms, rn.SizeInBits()) | |
1290 Rn(rn) | Rd(rd)); | 1288 Rn(rn) | Rd(rd)); |
1291 } | 1289 } |
1292 | 1290 |
1293 | 1291 |
1294 void Assembler::sbfm(const Register& rd, | 1292 void Assembler::sbfm(const Register& rd, const Register& rn, int immr, |
1295 const Register& rn, | 1293 int imms) { |
1296 unsigned immr, | |
1297 unsigned imms) { | |
1298 DCHECK(rd.Is64Bits() || rn.Is32Bits()); | 1294 DCHECK(rd.Is64Bits() || rn.Is32Bits()); |
1299 Instr N = SF(rd) >> (kSFOffset - kBitfieldNOffset); | 1295 Instr N = SF(rd) >> (kSFOffset - kBitfieldNOffset); |
1300 Emit(SF(rd) | SBFM | N | | 1296 Emit(SF(rd) | SBFM | N | |
1301 ImmR(immr, rd.SizeInBits()) | | 1297 ImmR(immr, rd.SizeInBits()) | |
1302 ImmS(imms, rn.SizeInBits()) | | 1298 ImmS(imms, rn.SizeInBits()) | |
1303 Rn(rn) | Rd(rd)); | 1299 Rn(rn) | Rd(rd)); |
1304 } | 1300 } |
1305 | 1301 |
1306 | 1302 |
1307 void Assembler::ubfm(const Register& rd, | 1303 void Assembler::ubfm(const Register& rd, const Register& rn, int immr, |
1308 const Register& rn, | 1304 int imms) { |
1309 unsigned immr, | |
1310 unsigned imms) { | |
1311 DCHECK(rd.SizeInBits() == rn.SizeInBits()); | 1305 DCHECK(rd.SizeInBits() == rn.SizeInBits()); |
1312 Instr N = SF(rd) >> (kSFOffset - kBitfieldNOffset); | 1306 Instr N = SF(rd) >> (kSFOffset - kBitfieldNOffset); |
1313 Emit(SF(rd) | UBFM | N | | 1307 Emit(SF(rd) | UBFM | N | |
1314 ImmR(immr, rd.SizeInBits()) | | 1308 ImmR(immr, rd.SizeInBits()) | |
1315 ImmS(imms, rn.SizeInBits()) | | 1309 ImmS(imms, rn.SizeInBits()) | |
1316 Rn(rn) | Rd(rd)); | 1310 Rn(rn) | Rd(rd)); |
1317 } | 1311 } |
1318 | 1312 |
1319 | 1313 |
1320 void Assembler::extr(const Register& rd, | 1314 void Assembler::extr(const Register& rd, const Register& rn, const Register& rm, |
1321 const Register& rn, | 1315 int lsb) { |
1322 const Register& rm, | |
1323 unsigned lsb) { | |
1324 DCHECK(rd.SizeInBits() == rn.SizeInBits()); | 1316 DCHECK(rd.SizeInBits() == rn.SizeInBits()); |
1325 DCHECK(rd.SizeInBits() == rm.SizeInBits()); | 1317 DCHECK(rd.SizeInBits() == rm.SizeInBits()); |
1326 Instr N = SF(rd) >> (kSFOffset - kBitfieldNOffset); | 1318 Instr N = SF(rd) >> (kSFOffset - kBitfieldNOffset); |
1327 Emit(SF(rd) | EXTR | N | Rm(rm) | | 1319 Emit(SF(rd) | EXTR | N | Rm(rm) | |
1328 ImmS(lsb, rn.SizeInBits()) | Rn(rn) | Rd(rd)); | 1320 ImmS(lsb, rn.SizeInBits()) | Rn(rn) | Rd(rd)); |
1329 } | 1321 } |
1330 | 1322 |
1331 | 1323 |
1332 void Assembler::csel(const Register& rd, | 1324 void Assembler::csel(const Register& rd, |
1333 const Register& rn, | 1325 const Register& rn, |
(...skipping 1808 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3142 movk(scratch, (target_offset >> 32) & 0xFFFF, 32); | 3134 movk(scratch, (target_offset >> 32) & 0xFFFF, 32); |
3143 DCHECK((target_offset >> 48) == 0); | 3135 DCHECK((target_offset >> 48) == 0); |
3144 add(rd, rd, scratch); | 3136 add(rd, rd, scratch); |
3145 } | 3137 } |
3146 | 3138 |
3147 | 3139 |
3148 } // namespace internal | 3140 } // namespace internal |
3149 } // namespace v8 | 3141 } // namespace v8 |
3150 | 3142 |
3151 #endif // V8_TARGET_ARCH_ARM64 | 3143 #endif // V8_TARGET_ARCH_ARM64 |
OLD | NEW |