< prev index next >

src/cpu/aarch64/vm/assembler_aarch64.cpp

Print this page




  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  *
  25  */
  26 
  27 #include <stdio.h>
  28 #include <sys/types.h>
  29 
  30 #include "precompiled.hpp"
  31 #include "asm/assembler.hpp"
  32 #include "asm/assembler.inline.hpp"
  33 #include "interpreter/interpreter.hpp"
  34 
  35 #ifndef PRODUCT
  36 const unsigned long Assembler::asm_bp = 0x00007fffee09ac88;
  37 #endif
  38 
  39 #include "compiler/disassembler.hpp"
  40 #include "memory/resourceArea.hpp"
  41 #include "runtime/interfaceSupport.hpp"
  42 #include "runtime/sharedRuntime.hpp"
  43 #include "immediate_aarch64.hpp"
  44 
  45 // #include "gc_interface/collectedHeap.inline.hpp"
  46 // #include "interpreter/interpreter.hpp"
  47 // #include "memory/cardTableModRefBS.hpp"
  48 // #include "prims/methodHandles.hpp"
  49 // #include "runtime/biasedLocking.hpp"
  50 // #include "runtime/interfaceSupport.hpp"
  51 // #include "runtime/objectMonitor.hpp"
  52 // #include "runtime/os.hpp"
  53 // #include "runtime/sharedRuntime.hpp"
  54 // #include "runtime/stubRoutines.hpp"
  55 // #if INCLUDE_ALL_GCS
  56 // #include "gc_implementation/g1/g1CollectedHeap.inline.hpp"


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




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




  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  *
  25  */
  26 
  27 #include <stdio.h>
  28 #include <sys/types.h>
  29 
  30 #include "precompiled.hpp"
  31 #include "asm/assembler.hpp"
  32 #include "asm/assembler.inline.hpp"
  33 #include "interpreter/interpreter.hpp"
  34 
  35 #ifndef PRODUCT
  36 const unsigned long Assembler::asm_bp = 0x0000007fa8092b5c;
  37 #endif
  38 
  39 #include "compiler/disassembler.hpp"
  40 #include "memory/resourceArea.hpp"
  41 #include "runtime/interfaceSupport.hpp"
  42 #include "runtime/sharedRuntime.hpp"
  43 #include "immediate_aarch64.hpp"
  44 
  45 // #include "gc_interface/collectedHeap.inline.hpp"
  46 // #include "interpreter/interpreter.hpp"
  47 // #include "memory/cardTableModRefBS.hpp"
  48 // #include "prims/methodHandles.hpp"
  49 // #include "runtime/biasedLocking.hpp"
  50 // #include "runtime/interfaceSupport.hpp"
  51 // #include "runtime/objectMonitor.hpp"
  52 // #include "runtime/os.hpp"
  53 // #include "runtime/sharedRuntime.hpp"
  54 // #include "runtime/stubRoutines.hpp"
  55 // #if INCLUDE_ALL_GCS
  56 // #include "gc_implementation/g1/g1CollectedHeap.inline.hpp"


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


< prev index next >