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. |
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); |