1 define(choose, `loadStore($1, &MacroAssembler::$3, $2, $4, 2 $5, $6, $7, $8);dnl 3 4 %}')dnl 5 define(access, ` 6 $3Register $1_reg = as_$3Register($$1$$reg); 7 $4choose(MacroAssembler(&cbuf), $1_reg,$2,$mem->opcode(), 8 as_Register($mem$$base),$mem$$index,$mem$$scale,$mem$$disp)')dnl 9 define(load,` 10 enc_class aarch64_enc_$2($1 dst, memory mem) %{dnl 11 access(dst,$2,$3)')dnl 12 load(iRegI,ldrsbw) 13 load(iRegI,ldrsb) 14 load(iRegI,ldrb) 15 load(iRegL,ldrb) 16 load(iRegI,ldrshw) 17 load(iRegI,ldrsh) 18 load(iRegI,ldrh) 19 load(iRegL,ldrh) 20 load(iRegI,ldrw) 21 load(iRegL,ldrw) 22 load(iRegL,ldrsw) 23 load(iRegL,ldr) 24 load(vRegF,ldrs,Float) 25 load(vRegD,ldrd,Float) 26 define(STORE,` 27 enc_class aarch64_enc_$2($1 src, memory mem) %{dnl 28 access(src,$2,$3,$4)')dnl 29 define(STORE0,` 30 enc_class aarch64_enc_$2`'0(memory mem) %{ 31 MacroAssembler _masm(&cbuf); 32 choose(_masm,zr,$2,$mem->opcode(), 33 as_$3Register($mem$$base),$mem$$index,$mem$$scale,$mem$$disp)')dnl 34 STORE(iRegI,strb) 35 STORE0(iRegI,strb) 36 STORE(iRegI,strh) 37 STORE0(iRegI,strh) 38 STORE(iRegI,strw) 39 STORE0(iRegI,strw) 40 STORE(iRegL,str,, 41 `// we sometimes get asked to store the stack pointer into the 42 // current thread -- we cannot do that directly on AArch64 43 if (src_reg == r31_sp) { 44 MacroAssembler _masm(&cbuf); 45 assert(as_Register($mem$$base) == rthread, "unexpected store for sp"); 46 __ mov(rscratch2, sp); 47 src_reg = rscratch2; 48 } 49 ') 50 STORE0(iRegL,str) 51 STORE(vRegF,strs,Float) 52 STORE(vRegD,strd,Float) 53 54 enc_class aarch64_enc_strw_immn(immN src, memory mem) %{ 55 MacroAssembler _masm(&cbuf); 56 address con = (address)$src$$constant; 57 // need to do this the hard way until we can manage relocs 58 // for 32 bit constants 59 __ movoop(rscratch2, (jobject)con); 60 if (con) __ encode_heap_oop_not_null(rscratch2); 61 choose(_masm,rscratch2,strw,$mem->opcode(), 62 as_Register($mem$$base),$mem$$index,$mem$$scale,$mem$$disp) 63 64 enc_class aarch64_enc_strw_immnk(immN src, memory mem) %{ 65 MacroAssembler _masm(&cbuf); 66 address con = (address)$src$$constant; 67 // need to do this the hard way until we can manage relocs 68 // for 32 bit constants 69 __ movoop(rscratch2, (jobject)con); 70 __ encode_klass_not_null(rscratch2); 71 choose(_masm,rscratch2,strw,$mem->opcode(), 72 as_Register($mem$$base),$mem$$index,$mem$$scale,$mem$$disp) 73