PPC/S390: Use ByteReverse from utils
This CL removes the the usage of custom byte reversing functions from the simulator and uses the one provided by V8 utils under: ``` src/utils/utils.h ``` Change-Id: I9a334a10d659b8a3315c34563eb3e6f84644a9e8 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3714898 Commit-Queue: Milad Farazmand <mfarazma@redhat.com> Reviewed-by: Junliang Yan <junyan@redhat.com> Cr-Commit-Position: refs/heads/main@{#81261}
This commit is contained in:
parent
308a7e2f58
commit
69a77f6558
@ -3189,7 +3189,7 @@ void Simulator::ExecuteGeneric(Instruction* instr) {
|
||||
int rb = instr->RBValue();
|
||||
intptr_t ra_val = ra == 0 ? 0 : get_register(ra);
|
||||
intptr_t rb_val = get_register(rb);
|
||||
intptr_t result = __builtin_bswap64(ReadDW(ra_val + rb_val));
|
||||
intptr_t result = ByteReverse<int64_t>(ReadDW(ra_val + rb_val));
|
||||
set_register(rt, result);
|
||||
break;
|
||||
}
|
||||
@ -3199,7 +3199,7 @@ void Simulator::ExecuteGeneric(Instruction* instr) {
|
||||
int rb = instr->RBValue();
|
||||
intptr_t ra_val = ra == 0 ? 0 : get_register(ra);
|
||||
intptr_t rb_val = get_register(rb);
|
||||
intptr_t result = __builtin_bswap32(ReadW(ra_val + rb_val));
|
||||
intptr_t result = ByteReverse<int32_t>(ReadW(ra_val + rb_val));
|
||||
set_register(rt, result);
|
||||
break;
|
||||
}
|
||||
@ -3210,7 +3210,7 @@ void Simulator::ExecuteGeneric(Instruction* instr) {
|
||||
intptr_t ra_val = ra == 0 ? 0 : get_register(ra);
|
||||
intptr_t rs_val = get_register(rs);
|
||||
intptr_t rb_val = get_register(rb);
|
||||
WriteDW(ra_val + rb_val, __builtin_bswap64(rs_val));
|
||||
WriteDW(ra_val + rb_val, ByteReverse<int64_t>(rs_val));
|
||||
break;
|
||||
}
|
||||
case STWBRX: {
|
||||
@ -3220,7 +3220,7 @@ void Simulator::ExecuteGeneric(Instruction* instr) {
|
||||
intptr_t ra_val = ra == 0 ? 0 : get_register(ra);
|
||||
intptr_t rs_val = get_register(rs);
|
||||
intptr_t rb_val = get_register(rb);
|
||||
WriteW(ra_val + rb_val, __builtin_bswap32(rs_val));
|
||||
WriteW(ra_val + rb_val, ByteReverse<int32_t>(rs_val));
|
||||
break;
|
||||
}
|
||||
case STHBRX: {
|
||||
@ -3230,7 +3230,7 @@ void Simulator::ExecuteGeneric(Instruction* instr) {
|
||||
intptr_t ra_val = ra == 0 ? 0 : get_register(ra);
|
||||
intptr_t rs_val = get_register(rs);
|
||||
intptr_t rb_val = get_register(rb);
|
||||
WriteH(ra_val + rb_val, __builtin_bswap16(rs_val));
|
||||
WriteH(ra_val + rb_val, ByteReverse<int16_t>(rs_val));
|
||||
break;
|
||||
}
|
||||
case STDX:
|
||||
@ -3496,8 +3496,8 @@ void Simulator::ExecuteGeneric(Instruction* instr) {
|
||||
uint64_t rs_val = get_register(rs);
|
||||
uint32_t rs_high = rs_val >> kBitsPerWord;
|
||||
uint32_t rs_low = (rs_val << kBitsPerWord) >> kBitsPerWord;
|
||||
uint64_t result = __builtin_bswap32(rs_high);
|
||||
result = (result << kBitsPerWord) | __builtin_bswap32(rs_low);
|
||||
uint64_t result = ByteReverse<int32_t>(rs_high);
|
||||
result = (result << kBitsPerWord) | ByteReverse<int32_t>(rs_low);
|
||||
set_register(ra, result);
|
||||
break;
|
||||
}
|
||||
@ -3505,7 +3505,7 @@ void Simulator::ExecuteGeneric(Instruction* instr) {
|
||||
int rs = instr->RSValue();
|
||||
int ra = instr->RAValue();
|
||||
uint64_t rs_val = get_register(rs);
|
||||
set_register(ra, __builtin_bswap64(rs_val));
|
||||
set_register(ra, ByteReverse<int64_t>(rs_val));
|
||||
break;
|
||||
}
|
||||
case FCFIDS: {
|
||||
|
@ -328,8 +328,8 @@ class Simulator : public SimulatorBase {
|
||||
__uint128_t u128;
|
||||
} res, val;
|
||||
val.u128 = v;
|
||||
res.u64[0] = __builtin_bswap64(val.u64[1]);
|
||||
res.u64[1] = __builtin_bswap64(val.u64[0]);
|
||||
res.u64[0] = ByteReverse<int64_t>(val.u64[1]);
|
||||
res.u64[1] = ByteReverse<int64_t>(val.u64[0]);
|
||||
return res.u128;
|
||||
}
|
||||
|
||||
|
@ -8372,7 +8372,7 @@ EVALUATE(LRVGR) {
|
||||
DCHECK_OPCODE(LRVGR);
|
||||
DECODE_RRE_INSTRUCTION(r1, r2);
|
||||
int64_t r2_val = get_register(r2);
|
||||
int64_t r1_val = ByteReverse(r2_val);
|
||||
int64_t r1_val = ByteReverse<int64_t>(r2_val);
|
||||
|
||||
set_register(r1, r1_val);
|
||||
return length;
|
||||
@ -8508,7 +8508,7 @@ EVALUATE(LRVR) {
|
||||
DCHECK_OPCODE(LRVR);
|
||||
DECODE_RRE_INSTRUCTION(r1, r2);
|
||||
int32_t r2_val = get_low_register<int32_t>(r2);
|
||||
int32_t r1_val = ByteReverse(r2_val);
|
||||
int32_t r1_val = ByteReverse<int32_t>(r2_val);
|
||||
|
||||
set_low_register(r1, r1_val);
|
||||
return length;
|
||||
@ -9471,7 +9471,7 @@ EVALUATE(LRVG) {
|
||||
int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
|
||||
intptr_t mem_addr = b2_val + x2_val + d2;
|
||||
int64_t mem_val = ReadW64(mem_addr);
|
||||
set_register(r1, ByteReverse(mem_val));
|
||||
set_register(r1, ByteReverse<int64_t>(mem_val));
|
||||
return length;
|
||||
}
|
||||
|
||||
@ -9482,7 +9482,7 @@ EVALUATE(LRV) {
|
||||
int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
|
||||
intptr_t mem_addr = b2_val + x2_val + d2;
|
||||
int32_t mem_val = ReadW(mem_addr);
|
||||
set_low_register(r1, ByteReverse(mem_val));
|
||||
set_low_register(r1, ByteReverse<int32_t>(mem_val));
|
||||
return length;
|
||||
}
|
||||
|
||||
@ -9494,7 +9494,7 @@ EVALUATE(LRVH) {
|
||||
int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
|
||||
intptr_t mem_addr = b2_val + x2_val + d2;
|
||||
int16_t mem_val = ReadH(mem_addr);
|
||||
int32_t result = ByteReverse(mem_val) & 0x0000FFFF;
|
||||
int32_t result = ByteReverse<int16_t>(mem_val) & 0x0000FFFF;
|
||||
result |= r1_val & 0xFFFF0000;
|
||||
set_low_register(r1, result);
|
||||
return length;
|
||||
@ -9579,7 +9579,7 @@ EVALUATE(STRV) {
|
||||
int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
|
||||
int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
|
||||
intptr_t mem_addr = b2_val + x2_val + d2;
|
||||
WriteW(mem_addr, ByteReverse(r1_val));
|
||||
WriteW(mem_addr, ByteReverse<int32_t>(r1_val));
|
||||
return length;
|
||||
}
|
||||
|
||||
@ -9590,7 +9590,7 @@ EVALUATE(STRVG) {
|
||||
int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
|
||||
int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
|
||||
intptr_t mem_addr = b2_val + x2_val + d2;
|
||||
WriteDW(mem_addr, ByteReverse(r1_val));
|
||||
WriteDW(mem_addr, ByteReverse<int64_t>(r1_val));
|
||||
return length;
|
||||
}
|
||||
|
||||
@ -9602,7 +9602,7 @@ EVALUATE(STRVH) {
|
||||
int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
|
||||
intptr_t mem_addr = b2_val + x2_val + d2;
|
||||
int16_t result = static_cast<int16_t>(r1_val >> 16);
|
||||
WriteH(mem_addr, ByteReverse(result));
|
||||
WriteH(mem_addr, ByteReverse<int16_t>(result));
|
||||
return length;
|
||||
}
|
||||
|
||||
|
@ -240,40 +240,6 @@ class Simulator : public SimulatorBase {
|
||||
inline void IncreaseStopCounter(uint32_t bkpt_code);
|
||||
void PrintStopInfo(uint32_t code);
|
||||
|
||||
// Byte Reverse
|
||||
static inline __uint128_t __builtin_bswap128(__uint128_t v) {
|
||||
union {
|
||||
uint64_t u64[2];
|
||||
__uint128_t u128;
|
||||
} res, val;
|
||||
val.u128 = v;
|
||||
res.u64[0] = __builtin_bswap64(val.u64[1]);
|
||||
res.u64[1] = __builtin_bswap64(val.u64[0]);
|
||||
return res.u128;
|
||||
}
|
||||
|
||||
template <class T>
|
||||
static inline T ByteReverse(T val) {
|
||||
constexpr int size = sizeof(T);
|
||||
#define CASE(type, size_in_bits) \
|
||||
case sizeof(type): { \
|
||||
type res = __builtin_bswap##size_in_bits(*reinterpret_cast<type*>(&val)); \
|
||||
return *reinterpret_cast<T*>(&res); \
|
||||
}
|
||||
switch (size) {
|
||||
case 1:
|
||||
return val;
|
||||
CASE(uint16_t, 16);
|
||||
CASE(uint32_t, 32);
|
||||
CASE(uint64_t, 64);
|
||||
CASE(__uint128_t, 128);
|
||||
default:
|
||||
UNREACHABLE();
|
||||
}
|
||||
#undef CASE
|
||||
return val;
|
||||
}
|
||||
|
||||
// Read and write memory.
|
||||
inline uint8_t ReadBU(intptr_t addr);
|
||||
inline int8_t ReadB(intptr_t addr);
|
||||
|
Loading…
Reference in New Issue
Block a user