8305056: Avoid unaligned access in emit_intX methods if it's unsupported

Reviewed-by: aph
This commit is contained in:
Vladimir Kempik
2023-04-24 11:31:49 +00:00
parent 136dad7197
commit f239695b56

View File

@@ -35,6 +35,11 @@
#include "utilities/resizeableResourceHash.hpp"
#include "utilities/macros.hpp"
template <typename T>
static inline void put_native(address p, T x) {
memcpy((void*)p, &x, sizeof x);
}
class PhaseCFG;
class Compile;
class BufferBlob;
@@ -218,7 +223,10 @@ class CodeSection {
set_end(curr);
}
void emit_int16(uint16_t x) { *((uint16_t*) end()) = x; set_end(end() + sizeof(uint16_t)); }
template <typename T>
void emit_native(T x) { put_native(end(), x); set_end(end() + sizeof x); }
void emit_int16(uint16_t x) { emit_native(x); }
void emit_int16(uint8_t x1, uint8_t x2) {
address curr = end();
*((uint8_t*) curr++) = x1;
@@ -234,11 +242,7 @@ class CodeSection {
set_end(curr);
}
void emit_int32(uint32_t x) {
address curr = end();
*((uint32_t*) curr) = x;
set_end(curr + sizeof(uint32_t));
}
void emit_int32(uint32_t x) { emit_native(x); }
void emit_int32(uint8_t x1, uint8_t x2, uint8_t x3, uint8_t x4) {
address curr = end();
*((uint8_t*) curr++) = x1;
@@ -248,11 +252,10 @@ class CodeSection {
set_end(curr);
}
void emit_int64( uint64_t x) { *((uint64_t*) end()) = x; set_end(end() + sizeof(uint64_t)); }
void emit_float( jfloat x) { *((jfloat*) end()) = x; set_end(end() + sizeof(jfloat)); }
void emit_double(jdouble x) { *((jdouble*) end()) = x; set_end(end() + sizeof(jdouble)); }
void emit_address(address x) { *((address*) end()) = x; set_end(end() + sizeof(address)); }
void emit_int64(uint64_t x) { emit_native(x); }
void emit_float(jfloat x) { emit_native(x); }
void emit_double(jdouble x) { emit_native(x); }
void emit_address(address x) { emit_native(x); }
// Share a scratch buffer for relocinfo. (Hacky; saves a resource allocation.)
void initialize_shared_locs(relocInfo* buf, int length);