Skip to content

Commit 739c792

Browse files
authored
Merge pull request #8 from JornVernee/Vlad_Comments
Address More Review comments
2 parents 9b7cd25 + c8dafc6 commit 739c792

29 files changed

+152
-192
lines changed

src/hotspot/cpu/aarch64/foreign_globals_aarch64.hpp

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -28,22 +28,7 @@
2828
#include "asm/macroAssembler.hpp"
2929
#include "utilities/growableArray.hpp"
3030

31-
#define __ _masm->
32-
33-
struct VectorRegister {
34-
static const size_t VECTOR_MAX_WIDTH_BITS = 128;
35-
static const size_t VECTOR_MAX_WIDTH_BYTES = VECTOR_MAX_WIDTH_BITS / 8;
36-
static const size_t VECTOR_MAX_WIDTH_U64S = VECTOR_MAX_WIDTH_BITS / 64;
37-
static const size_t VECTOR_MAX_WIDTH_FLOATS = VECTOR_MAX_WIDTH_BITS / 32;
38-
static const size_t VECTOR_MAX_WIDTH_DOUBLES = VECTOR_MAX_WIDTH_BITS / 64;
39-
40-
union {
41-
uint8_t bits[VECTOR_MAX_WIDTH_BYTES];
42-
uint64_t u64[VECTOR_MAX_WIDTH_U64S];
43-
float f[VECTOR_MAX_WIDTH_FLOATS];
44-
double d[VECTOR_MAX_WIDTH_DOUBLES];
45-
};
46-
};
31+
constexpr size_t float_reg_size = 16; // bytes
4732

4833
struct ABIDescriptor {
4934
GrowableArray<Register> _integer_argument_registers;

src/hotspot/cpu/aarch64/universalNativeInvoker_aarch64.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
#include "memory/resourceArea.hpp"
2929
#include "prims/universalNativeInvoker.hpp"
3030

31+
#define __ _masm->
32+
3133
void ProgrammableInvoker::Generator::generate() {
3234
__ enter();
3335

@@ -73,7 +75,7 @@ void ProgrammableInvoker::Generator::generate() {
7375
__ bind(Ldone);
7476

7577
for (int i = 0; i < _abi->_vector_argument_registers.length(); i++) {
76-
ssize_t offs = _layout->arguments_vector + i * sizeof(VectorRegister);
78+
ssize_t offs = _layout->arguments_vector + i * float_reg_size;
7779
__ ldrq(_abi->_vector_argument_registers.at(i), Address(Rctx, offs));
7880
}
7981

@@ -99,7 +101,7 @@ void ProgrammableInvoker::Generator::generate() {
99101
}
100102

101103
for (int i = 0; i < _abi->_vector_return_registers.length(); i++) {
102-
ssize_t offs = _layout->returns_vector + i * sizeof(VectorRegister);
104+
ssize_t offs = _layout->returns_vector + i * float_reg_size;
103105
__ strq(_abi->_vector_return_registers.at(i), Address(Rctx, offs));
104106
}
105107

src/hotspot/cpu/aarch64/universalUpcallHandler_aarch64.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
#include "memory/resourceArea.hpp"
2828
#include "prims/universalUpcallHandler.hpp"
2929

30+
#define __ _masm->
31+
3032
// 1. Create buffer according to layout
3133
// 2. Load registers & stack args into buffer
3234
// 3. Call upcall helper with upcall handler instance & buffer pointer (C++ ABI)
@@ -63,7 +65,7 @@ address ProgrammableUpcallHandler::generate_upcall_stub(jobject rec, jobject jab
6365

6466
for (int i = 0; i < abi._vector_argument_registers.length(); i++) {
6567
FloatRegister reg = abi._vector_argument_registers.at(i);
66-
ssize_t offset = layout.arguments_vector + i * sizeof(VectorRegister);
68+
ssize_t offset = layout.arguments_vector + i * float_reg_size;
6769
__ strq(reg, Address(sp, offset));
6870
}
6971

@@ -84,7 +86,7 @@ address ProgrammableUpcallHandler::generate_upcall_stub(jobject rec, jobject jab
8486

8587
for (int i = 0; i < abi._vector_return_registers.length(); i++) {
8688
FloatRegister reg = abi._vector_return_registers.at(i);
87-
ssize_t offs = layout.returns_vector + i * sizeof(VectorRegister);
89+
ssize_t offs = layout.returns_vector + i * float_reg_size;
8890
__ ldrq(reg, Address(sp, offs));
8991
}
9092

src/hotspot/cpu/aarch64/vmreg_aarch64.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@ void VMRegImpl::set_regName() {
5454

5555
#define INTEGER_TYPE 0
5656
#define VECTOR_TYPE 1
57-
#define X87_TYPE 2
5857
#define STACK_TYPE 3
5958

6059
VMReg VMRegImpl::vmStorageToVMReg(int type, int index) {

src/hotspot/cpu/x86/foreign_globals_x86.hpp

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -27,22 +27,7 @@
2727
#include "asm/macroAssembler.hpp"
2828
#include "utilities/growableArray.hpp"
2929

30-
#define __ _masm->
31-
32-
struct VectorRegister {
33-
static const size_t VECTOR_MAX_WIDTH_BITS = 512; // AVX-512 (64-byte) vector types
34-
static const size_t VECTOR_MAX_WIDTH_BYTES = VECTOR_MAX_WIDTH_BITS / 8;
35-
static const size_t VECTOR_MAX_WIDTH_U64S = VECTOR_MAX_WIDTH_BITS / 64;
36-
static const size_t VECTOR_MAX_WIDTH_FLOATS = VECTOR_MAX_WIDTH_BITS / 32;
37-
static const size_t VECTOR_MAX_WIDTH_DOUBLES = VECTOR_MAX_WIDTH_BITS / 64;
38-
39-
union {
40-
uint8_t bits[VECTOR_MAX_WIDTH_BYTES];
41-
uint64_t u64[VECTOR_MAX_WIDTH_U64S];
42-
float f[VECTOR_MAX_WIDTH_FLOATS];
43-
double d[VECTOR_MAX_WIDTH_DOUBLES];
44-
};
45-
};
30+
constexpr size_t xmm_reg_size = 16; // size of XMM reg
4631

4732
struct ABIDescriptor {
4833
GrowableArray<Register> _integer_argument_registers;

src/hotspot/cpu/x86/sharedRuntime_x86_64.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3462,10 +3462,10 @@ bool target_uses_register(VMReg reg) {
34623462
#endif
34633463
};
34643464

3465-
address SharedRuntime::make_native_invoker(address call_target,
3466-
int shadow_space_bytes,
3467-
const GrowableArray<VMReg>& input_registers,
3468-
const GrowableArray<VMReg>& output_registers) {
3465+
BufferBlob* SharedRuntime::make_native_invoker(address call_target,
3466+
int shadow_space_bytes,
3467+
const GrowableArray<VMReg>& input_registers,
3468+
const GrowableArray<VMReg>& output_registers) {
34693469
BufferBlob* _invoke_native_blob = BufferBlob::create("nep_invoker_blob", native_invoker_code_size);
34703470
if (_invoke_native_blob == NULL)
34713471
return NULL; // allocation failure
@@ -3475,7 +3475,7 @@ address SharedRuntime::make_native_invoker(address call_target,
34753475
g.generate();
34763476
code.log_section_sizes("nep_invoker_blob");
34773477

3478-
return _invoke_native_blob->code_begin();
3478+
return _invoke_native_blob;
34793479
}
34803480

34813481
void NativeInvokerGenerator::generate() {

src/hotspot/cpu/x86/universalNativeInvoker_x86.cpp

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
#include "memory/resourceArea.hpp"
2828
#include "prims/universalNativeInvoker.hpp"
2929

30+
#define __ _masm->
31+
3032
void ProgrammableInvoker::Generator::generate() {
3133
__ enter();
3234

@@ -73,14 +75,8 @@ void ProgrammableInvoker::Generator::generate() {
7375
// [8] -> 512 bit -> zmm
7476

7577
XMMRegister reg = _abi->_vector_argument_registers.at(i);
76-
size_t offs = _layout->arguments_vector + i * sizeof(VectorRegister);
77-
if (UseAVX >= 3) {
78-
__ evmovdqul(reg, Address(ctxt_reg, (int)offs), Assembler::AVX_512bit);
79-
} else if (UseAVX >= 1) {
80-
__ vmovdqu(reg, Address(ctxt_reg, (int)offs));
81-
} else {
82-
__ movdqu(reg, Address(ctxt_reg, (int)offs));
83-
}
78+
size_t offs = _layout->arguments_vector + i * xmm_reg_size;
79+
__ movdqu(reg, Address(ctxt_reg, (int)offs));
8480
}
8581

8682
for (int i = 0; i < _abi->_integer_argument_registers.length(); i++) {
@@ -115,14 +111,8 @@ void ProgrammableInvoker::Generator::generate() {
115111
// [8] -> 512 bit -> zmm (AVX-512, aka AVX3)
116112

117113
XMMRegister reg = _abi->_vector_return_registers.at(i);
118-
size_t offs = _layout->returns_vector + i * sizeof(VectorRegister);
119-
if (UseAVX >= 3) {
120-
__ evmovdqul(Address(ctxt_reg, (int)offs), reg, Assembler::AVX_512bit);
121-
} else if (UseAVX >= 1) {
122-
__ vmovdqu(Address(ctxt_reg, (int)offs), reg);
123-
} else {
124-
__ movdqu(Address(ctxt_reg, (int)offs), reg);
125-
}
114+
size_t offs = _layout->returns_vector + i * xmm_reg_size;
115+
__ movdqu(Address(ctxt_reg, (int)offs), reg);
126116
}
127117

128118
for (size_t i = 0; i < _abi->_X87_return_registers_noof; i++) {

src/hotspot/cpu/x86/universalUpcallHandler_x86.cpp

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
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--) {

src/hotspot/share/ci/ciEnv.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -970,8 +970,7 @@ void ciEnv::register_method(ciMethod* target,
970970
bool has_unsafe_access,
971971
bool has_wide_vectors,
972972
RTMState rtm_state,
973-
address* native_stubs,
974-
int num_stubs) {
973+
const GrowableArrayView<BufferBlob*>& native_invokers) {
975974
VM_ENTRY_MARK;
976975
nmethod* nm = NULL;
977976
{
@@ -1061,7 +1060,7 @@ void ciEnv::register_method(ciMethod* target,
10611060
frame_words, oop_map_set,
10621061
handler_table, inc_table,
10631062
compiler, task()->comp_level(),
1064-
native_stubs, num_stubs);
1063+
native_invokers);
10651064

10661065
// Free codeBlobs
10671066
code_buffer->free_blob();

src/hotspot/share/ci/ciEnv.hpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -381,8 +381,7 @@ class ciEnv : StackObj {
381381
bool has_unsafe_access,
382382
bool has_wide_vectors,
383383
RTMState rtm_state = NoRTM,
384-
address* native_stubs = NULL,
385-
int num_stubs = 0);
384+
const GrowableArrayView<BufferBlob*>& native_invokers = GrowableArrayView<BufferBlob*>::EMPTY);
386385

387386

388387
// Access to certain well known ciObjects.

0 commit comments

Comments
 (0)