src/cpu/x86/vm/assembler_x86_64.hpp

changeset 548
ba764ed4b6f2
parent 506
3d62cb85208d
child 559
b130b98db9cf
equal deleted inserted replaced
545:a49a647afe9a 548:ba764ed4b6f2
35 n_int_register_parameters_c = 4, // rcx, rdx, r8, r9 (c_rarg0, c_rarg1, ...) 35 n_int_register_parameters_c = 4, // rcx, rdx, r8, r9 (c_rarg0, c_rarg1, ...)
36 n_float_register_parameters_c = 4, // xmm0 - xmm3 (c_farg0, c_farg1, ... ) 36 n_float_register_parameters_c = 4, // xmm0 - xmm3 (c_farg0, c_farg1, ... )
37 #else 37 #else
38 n_int_register_parameters_c = 6, // rdi, rsi, rdx, rcx, r8, r9 (c_rarg0, c_rarg1, ...) 38 n_int_register_parameters_c = 6, // rdi, rsi, rdx, rcx, r8, r9 (c_rarg0, c_rarg1, ...)
39 n_float_register_parameters_c = 8, // xmm0 - xmm7 (c_farg0, c_farg1, ... ) 39 n_float_register_parameters_c = 8, // xmm0 - xmm7 (c_farg0, c_farg1, ... )
40 #endif 40 #endif // _WIN64
41 n_int_register_parameters_j = 6, // j_rarg0, j_rarg1, ... 41 n_int_register_parameters_j = 6, // j_rarg0, j_rarg1, ...
42 n_float_register_parameters_j = 8 // j_farg0, j_farg1, ... 42 n_float_register_parameters_j = 8 // j_farg0, j_farg1, ...
43 }; 43 };
44 }; 44 };
45 45
75 REGISTER_DECLARATION(XMMRegister, c_farg4, xmm4); 75 REGISTER_DECLARATION(XMMRegister, c_farg4, xmm4);
76 REGISTER_DECLARATION(XMMRegister, c_farg5, xmm5); 76 REGISTER_DECLARATION(XMMRegister, c_farg5, xmm5);
77 REGISTER_DECLARATION(XMMRegister, c_farg6, xmm6); 77 REGISTER_DECLARATION(XMMRegister, c_farg6, xmm6);
78 REGISTER_DECLARATION(XMMRegister, c_farg7, xmm7); 78 REGISTER_DECLARATION(XMMRegister, c_farg7, xmm7);
79 79
80 #endif 80 #endif // _WIN64
81 81
82 // Symbolically name the register arguments used by the Java calling convention. 82 // Symbolically name the register arguments used by the Java calling convention.
83 // We have control over the convention for java so we can do what we please. 83 // We have control over the convention for java so we can do what we please.
84 // What pleases us is to offset the java calling convention so that when 84 // What pleases us is to offset the java calling convention so that when
85 // we call a suitable jni method the arguments are lined up and we don't 85 // we call a suitable jni method the arguments are lined up and we don't
103 REGISTER_DECLARATION(Register, j_rarg3, rdi); 103 REGISTER_DECLARATION(Register, j_rarg3, rdi);
104 REGISTER_DECLARATION(Register, j_rarg4, rsi); 104 REGISTER_DECLARATION(Register, j_rarg4, rsi);
105 #else 105 #else
106 REGISTER_DECLARATION(Register, j_rarg3, c_rarg4); 106 REGISTER_DECLARATION(Register, j_rarg3, c_rarg4);
107 REGISTER_DECLARATION(Register, j_rarg4, c_rarg5); 107 REGISTER_DECLARATION(Register, j_rarg4, c_rarg5);
108 #endif /* _WIN64 */ 108 #endif // _WIN64
109 REGISTER_DECLARATION(Register, j_rarg5, c_rarg0); 109 REGISTER_DECLARATION(Register, j_rarg5, c_rarg0);
110 110
111 REGISTER_DECLARATION(XMMRegister, j_farg0, xmm0); 111 REGISTER_DECLARATION(XMMRegister, j_farg0, xmm0);
112 REGISTER_DECLARATION(XMMRegister, j_farg1, xmm1); 112 REGISTER_DECLARATION(XMMRegister, j_farg1, xmm1);
113 REGISTER_DECLARATION(XMMRegister, j_farg2, xmm2); 113 REGISTER_DECLARATION(XMMRegister, j_farg2, xmm2);
118 REGISTER_DECLARATION(XMMRegister, j_farg7, xmm7); 118 REGISTER_DECLARATION(XMMRegister, j_farg7, xmm7);
119 119
120 REGISTER_DECLARATION(Register, rscratch1, r10); // volatile 120 REGISTER_DECLARATION(Register, rscratch1, r10); // volatile
121 REGISTER_DECLARATION(Register, rscratch2, r11); // volatile 121 REGISTER_DECLARATION(Register, rscratch2, r11); // volatile
122 122
123 REGISTER_DECLARATION(Register, r15_thread, r15); // callee-saved 123 REGISTER_DECLARATION(Register, r12_heapbase, r12); // callee-saved
124 REGISTER_DECLARATION(Register, r15_thread, r15); // callee-saved
124 125
125 #endif // _LP64 126 #endif // _LP64
126 127
127 // Address is an abstraction used to represent a memory location 128 // Address is an abstraction used to represent a memory location
128 // using any of the amd64 addressing modes with one object. 129 // using any of the amd64 addressing modes with one object.
783 void ret(int imm16); 784 void ret(int imm16);
784 void smovl(); 785 void smovl();
785 void rep_movl(); 786 void rep_movl();
786 void rep_movq(); 787 void rep_movq();
787 void rep_set(); 788 void rep_set();
788 void repne_scan(); 789 void repne_scanl();
790 void repne_scanq();
789 void setb(Condition cc, Register dst); 791 void setb(Condition cc, Register dst);
790 792
791 void clflush(Address adr); 793 void clflush(Address adr);
792 794
793 enum Membar_mask_bits { 795 enum Membar_mask_bits {
1097 void movbool(Register dst, Address src); 1099 void movbool(Register dst, Address src);
1098 void movbool(Address dst, bool boolconst); 1100 void movbool(Address dst, bool boolconst);
1099 void movbool(Address dst, Register src); 1101 void movbool(Address dst, Register src);
1100 void testbool(Register dst); 1102 void testbool(Register dst);
1101 1103
1104 // oop manipulations
1105 void load_klass(Register dst, Register src);
1106 void store_klass(Register dst, Register src);
1107
1108 void load_heap_oop(Register dst, Address src);
1109 void store_heap_oop(Address dst, Register src);
1110 void encode_heap_oop(Register r);
1111 void decode_heap_oop(Register r);
1112 void encode_heap_oop_not_null(Register r);
1113 void decode_heap_oop_not_null(Register r);
1114
1102 // Stack frame creation/removal 1115 // Stack frame creation/removal
1103 void enter(); 1116 void enter();
1104 void leave(); 1117 void leave();
1105 1118
1106 // Support for getting the JavaThread pointer (i.e.; a reference to 1119 // Support for getting the JavaThread pointer (i.e.; a reference to
1248 1261
1249 // only if +VerifyOops 1262 // only if +VerifyOops
1250 void verify_oop(Register reg, const char* s = "broken oop"); 1263 void verify_oop(Register reg, const char* s = "broken oop");
1251 void verify_oop_addr(Address addr, const char * s = "broken oop addr"); 1264 void verify_oop_addr(Address addr, const char * s = "broken oop addr");
1252 1265
1266 // if heap base register is used - reinit it with the correct value
1267 void reinit_heapbase();
1268
1253 // only if +VerifyFPU 1269 // only if +VerifyFPU
1254 void verify_FPU(int stack_depth, const char* s = "illegal FPU state") {} 1270 void verify_FPU(int stack_depth, const char* s = "illegal FPU state") {}
1255 1271
1256 // prints msg, dumps registers and stops execution 1272 // prints msg, dumps registers and stops execution
1257 void stop(const char* msg); 1273 void stop(const char* msg);

mercurial