< prev index next >

src/hotspot/cpu/aarch64/assembler_aarch64.cpp

Print this page
rev 55308 : z_aarch64 8224675


1248   case base_plus_offset: {
1249     if (_offset == 0 && _base == r) // it's a nop
1250       break;
1251     if (_offset > 0)
1252       __ add(r, _base, _offset);
1253     else
1254       __ sub(r, _base, -_offset);
1255       break;
1256   }
1257   case base_plus_offset_reg: {
1258     __ add(r, _base, _index, _ext.op(), MAX(_ext.shift(), 0));
1259     break;
1260   }
1261   case literal: {
1262     if (rtype == relocInfo::none)
1263       __ mov(r, target());
1264     else
1265       __ movptr(r, (uint64_t)target());
1266     break;
1267   }







1268   default:
1269     ShouldNotReachHere();
1270   }
1271 }
1272 
1273 void Assembler::adrp(Register reg1, const Address &dest, unsigned long &byte_offset) {
1274   ShouldNotReachHere();
1275 }
1276 
1277 #undef __
1278 
1279 #define starti Instruction_aarch64 do_not_use(this); set_current(&do_not_use)
1280 
1281   void Assembler::adr(Register Rd, address adr) {
1282     long offset = adr - pc();
1283     int offset_lo = offset & 3;
1284     offset >>= 2;
1285     starti;
1286     f(0, 31), f(offset_lo, 30, 29), f(0b10000, 28, 24), sf(offset, 23, 5);
1287     rf(Rd, 0);




1248   case base_plus_offset: {
1249     if (_offset == 0 && _base == r) // it's a nop
1250       break;
1251     if (_offset > 0)
1252       __ add(r, _base, _offset);
1253     else
1254       __ sub(r, _base, -_offset);
1255       break;
1256   }
1257   case base_plus_offset_reg: {
1258     __ add(r, _base, _index, _ext.op(), MAX(_ext.shift(), 0));
1259     break;
1260   }
1261   case literal: {
1262     if (rtype == relocInfo::none)
1263       __ mov(r, target());
1264     else
1265       __ movptr(r, (uint64_t)target());
1266     break;
1267   }
1268   case post: {
1269     // Post-indexed, just copy the contents of the register. Offset added afterwards.
1270     if (_base == r) // it's a nop
1271       break;
1272     __ mov(r, _base);
1273     break;
1274   }
1275   default:
1276     ShouldNotReachHere();
1277   }
1278 }
1279 
1280 void Assembler::adrp(Register reg1, const Address &dest, unsigned long &byte_offset) {
1281   ShouldNotReachHere();
1282 }
1283 
1284 #undef __
1285 
1286 #define starti Instruction_aarch64 do_not_use(this); set_current(&do_not_use)
1287 
1288   void Assembler::adr(Register Rd, address adr) {
1289     long offset = adr - pc();
1290     int offset_lo = offset & 3;
1291     offset >>= 2;
1292     starti;
1293     f(0, 31), f(offset_lo, 30, 29), f(0b10000, 28, 24), sf(offset, 23, 5);
1294     rf(Rd, 0);


< prev index next >