2626#include " memory/resourceArea.hpp"
2727#include " prims/universalUpcallHandler.hpp"
2828
29+ #define __ _masm->
30+
2931// 1. Create buffer according to layout
3032// 2. Load registers & stack args into buffer
3133// 3. Call upcall helper with upcall handler instance & buffer pointer (C++ ABI)
@@ -41,7 +43,7 @@ address ProgrammableUpcallHandler::generate_upcall_stub(jobject rec, jobject jab
4143 MacroAssembler* _masm = new MacroAssembler (&buffer);
4244 int stack_alignment_C = 16 ; // bytes
4345 int register_size = sizeof (uintptr_t );
44- int buffer_alignment = sizeof (VectorRegister) ;
46+ int buffer_alignment = xmm_reg_size ;
4547
4648 // stub code
4749 __ enter ();
@@ -76,14 +78,8 @@ address ProgrammableUpcallHandler::generate_upcall_stub(jobject rec, jobject jab
7678
7779 for (int i = 0 ; i < abi._vector_argument_registers .length (); i++) {
7880 XMMRegister reg = abi._vector_argument_registers .at (i);
79- size_t offs = buffer_offset + layout.arguments_vector + i * sizeof (VectorRegister);
80- if (UseAVX >= 3 ) {
81- __ evmovdqul (Address (rsp, (int )offs), reg, Assembler::AVX_512bit);
82- } else if (UseAVX >= 1 ) {
83- __ vmovdqu (Address (rsp, (int )offs), reg);
84- } else {
85- __ movdqu (Address (rsp, (int )offs), reg);
86- }
81+ size_t offs = buffer_offset + layout.arguments_vector + i * xmm_reg_size;
82+ __ movdqu (Address (rsp, (int )offs), reg);
8783 }
8884
8985 // Capture prev stack pointer (stack arguments base)
@@ -121,14 +117,8 @@ address ProgrammableUpcallHandler::generate_upcall_stub(jobject rec, jobject jab
121117
122118 for (int i = 0 ; i < abi._vector_return_registers .length (); i++) {
123119 XMMRegister reg = abi._vector_return_registers .at (i);
124- size_t offs = buffer_offset + layout.returns_vector + i * sizeof (VectorRegister);
125- if (UseAVX >= 3 ) {
126- __ evmovdqul (reg, Address (rsp, (int )offs), Assembler::AVX_512bit);
127- } else if (UseAVX >= 1 ) {
128- __ vmovdqu (reg, Address (rsp, (int )offs));
129- } else {
130- __ movdqu (reg, Address (rsp, (int )offs));
131- }
120+ size_t offs = buffer_offset + layout.returns_vector + i * xmm_reg_size;
121+ __ movdqu (reg, Address (rsp, (int )offs));
132122 }
133123
134124 for (size_t i = abi._X87_return_registers_noof ; i > 0 ; i--) {
0 commit comments