Fixing IVM vector compare.
This commit is contained in:
parent
1bd789de56
commit
d30483bf53
|
@ -2296,24 +2296,25 @@ int Translate_DID_SATURATE(TranslationContext& ctx, Instr* i) {
|
||||||
return DispatchToC(ctx, i, IntCode_DID_SATURATE);
|
return DispatchToC(ctx, i, IntCode_DID_SATURATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define VECTOR_COMPARER(type, value, dest_value, count, op) \
|
#define VECTOR_COMPARER(type, value, dest_type, dest_value, count, op) \
|
||||||
const vec128_t& src1 = ics.rf[i->src1_reg].v128; \
|
const vec128_t& src1 = ics.rf[i->src1_reg].v128; \
|
||||||
const vec128_t& src2 = ics.rf[i->src2_reg].v128; \
|
const vec128_t& src2 = ics.rf[i->src2_reg].v128; \
|
||||||
vec128_t& dest = ics.rf[i->dest_reg].v128; \
|
vec128_t& dest = ics.rf[i->dest_reg].v128; \
|
||||||
for (int n = 0; n < count; n++) { \
|
for (int n = 0; n < count; n++) { \
|
||||||
dest.dest_value[n] = \
|
dest.dest_value[n] = ((type)src1.value[n] op(type) src2.value[n]) \
|
||||||
((type)src1.value[n] op(type) src2.value[n]) ? (type)0xFFFFFFFF : 0; \
|
? (dest_type)0xFFFFFFFF \
|
||||||
|
: 0; \
|
||||||
} \
|
} \
|
||||||
return IA_NEXT;
|
return IA_NEXT;
|
||||||
|
|
||||||
uint32_t IntCode_VECTOR_COMPARE_EQ_I8(IntCodeState& ics, const IntCode* i){
|
uint32_t IntCode_VECTOR_COMPARE_EQ_I8(IntCodeState& ics, const IntCode* i){
|
||||||
VECTOR_COMPARER(uint8_t, u8, u8, 16, == )};
|
VECTOR_COMPARER(uint8_t, u8, uint8_t, u8, 16, == )};
|
||||||
uint32_t IntCode_VECTOR_COMPARE_EQ_I16(IntCodeState& ics, const IntCode* i){
|
uint32_t IntCode_VECTOR_COMPARE_EQ_I16(IntCodeState& ics, const IntCode* i){
|
||||||
VECTOR_COMPARER(uint16_t, u16, u16, 8, == )};
|
VECTOR_COMPARER(uint16_t, u16, uint16_t, u16, 8, == )};
|
||||||
uint32_t IntCode_VECTOR_COMPARE_EQ_I32(IntCodeState& ics, const IntCode* i){
|
uint32_t IntCode_VECTOR_COMPARE_EQ_I32(IntCodeState& ics, const IntCode* i){
|
||||||
VECTOR_COMPARER(uint32_t, u32, u32, 4, == )};
|
VECTOR_COMPARER(uint32_t, u32, uint32_t, u32, 4, == )};
|
||||||
uint32_t IntCode_VECTOR_COMPARE_EQ_F32(IntCodeState& ics, const IntCode* i){
|
uint32_t IntCode_VECTOR_COMPARE_EQ_F32(IntCodeState& ics, const IntCode* i){
|
||||||
VECTOR_COMPARER(float, f32, u32, 4, == )};
|
VECTOR_COMPARER(float, f32, uint32_t, u32, 4, == )};
|
||||||
int Translate_VECTOR_COMPARE_EQ(TranslationContext& ctx, Instr* i) {
|
int Translate_VECTOR_COMPARE_EQ(TranslationContext& ctx, Instr* i) {
|
||||||
static IntCodeFn fns[] = {
|
static IntCodeFn fns[] = {
|
||||||
IntCode_VECTOR_COMPARE_EQ_I8, IntCode_VECTOR_COMPARE_EQ_I16,
|
IntCode_VECTOR_COMPARE_EQ_I8, IntCode_VECTOR_COMPARE_EQ_I16,
|
||||||
|
@ -2325,13 +2326,13 @@ int Translate_VECTOR_COMPARE_EQ(TranslationContext& ctx, Instr* i) {
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t IntCode_VECTOR_COMPARE_SGT_I8(IntCodeState& ics, const IntCode* i){
|
uint32_t IntCode_VECTOR_COMPARE_SGT_I8(IntCodeState& ics, const IntCode* i){
|
||||||
VECTOR_COMPARER(int8_t, i8, i8, 16, > )};
|
VECTOR_COMPARER(int8_t, i8, int8_t, i8, 16, > )};
|
||||||
uint32_t IntCode_VECTOR_COMPARE_SGT_I16(IntCodeState& ics, const IntCode* i){
|
uint32_t IntCode_VECTOR_COMPARE_SGT_I16(IntCodeState& ics, const IntCode* i){
|
||||||
VECTOR_COMPARER(int16_t, i16, i16, 8, > )};
|
VECTOR_COMPARER(int16_t, i16, int16_t, i16, 8, > )};
|
||||||
uint32_t IntCode_VECTOR_COMPARE_SGT_I32(IntCodeState& ics, const IntCode* i){
|
uint32_t IntCode_VECTOR_COMPARE_SGT_I32(IntCodeState& ics, const IntCode* i){
|
||||||
VECTOR_COMPARER(int32_t, i32, i32, 4, > )};
|
VECTOR_COMPARER(int32_t, i32, int32_t, i32, 4, > )};
|
||||||
uint32_t IntCode_VECTOR_COMPARE_SGT_F32(IntCodeState& ics, const IntCode* i){
|
uint32_t IntCode_VECTOR_COMPARE_SGT_F32(IntCodeState& ics, const IntCode* i){
|
||||||
VECTOR_COMPARER(float, f32, u32, 4, > )};
|
VECTOR_COMPARER(float, f32, uint32_t, u32, 4, > )};
|
||||||
int Translate_VECTOR_COMPARE_SGT(TranslationContext& ctx, Instr* i) {
|
int Translate_VECTOR_COMPARE_SGT(TranslationContext& ctx, Instr* i) {
|
||||||
static IntCodeFn fns[] = {
|
static IntCodeFn fns[] = {
|
||||||
IntCode_VECTOR_COMPARE_SGT_I8, IntCode_VECTOR_COMPARE_SGT_I16,
|
IntCode_VECTOR_COMPARE_SGT_I8, IntCode_VECTOR_COMPARE_SGT_I16,
|
||||||
|
@ -2343,13 +2344,13 @@ int Translate_VECTOR_COMPARE_SGT(TranslationContext& ctx, Instr* i) {
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t IntCode_VECTOR_COMPARE_SGE_I8(IntCodeState& ics, const IntCode* i){
|
uint32_t IntCode_VECTOR_COMPARE_SGE_I8(IntCodeState& ics, const IntCode* i){
|
||||||
VECTOR_COMPARER(int8_t, i8, i8, 16, >= )};
|
VECTOR_COMPARER(int8_t, i8, int8_t, i8, 16, >= )};
|
||||||
uint32_t IntCode_VECTOR_COMPARE_SGE_I16(IntCodeState& ics, const IntCode* i){
|
uint32_t IntCode_VECTOR_COMPARE_SGE_I16(IntCodeState& ics, const IntCode* i){
|
||||||
VECTOR_COMPARER(int16_t, i16, i16, 8, >= )};
|
VECTOR_COMPARER(int16_t, i16, int16_t, i16, 8, >= )};
|
||||||
uint32_t IntCode_VECTOR_COMPARE_SGE_I32(IntCodeState& ics, const IntCode* i){
|
uint32_t IntCode_VECTOR_COMPARE_SGE_I32(IntCodeState& ics, const IntCode* i){
|
||||||
VECTOR_COMPARER(int32_t, i32, i32, 4, >= )};
|
VECTOR_COMPARER(int32_t, i32, int32_t, i32, 4, >= )};
|
||||||
uint32_t IntCode_VECTOR_COMPARE_SGE_F32(IntCodeState& ics, const IntCode* i){
|
uint32_t IntCode_VECTOR_COMPARE_SGE_F32(IntCodeState& ics, const IntCode* i){
|
||||||
VECTOR_COMPARER(float, f32, u32, 4, >= )};
|
VECTOR_COMPARER(float, f32, uint32_t, u32, 4, >= )};
|
||||||
int Translate_VECTOR_COMPARE_SGE(TranslationContext& ctx, Instr* i) {
|
int Translate_VECTOR_COMPARE_SGE(TranslationContext& ctx, Instr* i) {
|
||||||
static IntCodeFn fns[] = {
|
static IntCodeFn fns[] = {
|
||||||
IntCode_VECTOR_COMPARE_SGE_I8, IntCode_VECTOR_COMPARE_SGE_I16,
|
IntCode_VECTOR_COMPARE_SGE_I8, IntCode_VECTOR_COMPARE_SGE_I16,
|
||||||
|
@ -2361,13 +2362,13 @@ int Translate_VECTOR_COMPARE_SGE(TranslationContext& ctx, Instr* i) {
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t IntCode_VECTOR_COMPARE_UGT_I8(IntCodeState& ics, const IntCode* i){
|
uint32_t IntCode_VECTOR_COMPARE_UGT_I8(IntCodeState& ics, const IntCode* i){
|
||||||
VECTOR_COMPARER(uint8_t, u8, u8, 16, > )};
|
VECTOR_COMPARER(uint8_t, u8, uint8_t, u8, 16, > )};
|
||||||
uint32_t IntCode_VECTOR_COMPARE_UGT_I16(IntCodeState& ics, const IntCode* i){
|
uint32_t IntCode_VECTOR_COMPARE_UGT_I16(IntCodeState& ics, const IntCode* i){
|
||||||
VECTOR_COMPARER(uint16_t, u16, u16, 8, > )};
|
VECTOR_COMPARER(uint16_t, u16, uint16_t, u16, 8, > )};
|
||||||
uint32_t IntCode_VECTOR_COMPARE_UGT_I32(IntCodeState& ics, const IntCode* i){
|
uint32_t IntCode_VECTOR_COMPARE_UGT_I32(IntCodeState& ics, const IntCode* i){
|
||||||
VECTOR_COMPARER(uint32_t, u32, u32, 4, > )};
|
VECTOR_COMPARER(uint32_t, u32, uint32_t, u32, 4, > )};
|
||||||
uint32_t IntCode_VECTOR_COMPARE_UGT_F32(IntCodeState& ics, const IntCode* i){
|
uint32_t IntCode_VECTOR_COMPARE_UGT_F32(IntCodeState& ics, const IntCode* i){
|
||||||
VECTOR_COMPARER(float, f32, u32, 4, > )};
|
VECTOR_COMPARER(float, f32, uint32_t, u32, 4, > )};
|
||||||
int Translate_VECTOR_COMPARE_UGT(TranslationContext& ctx, Instr* i) {
|
int Translate_VECTOR_COMPARE_UGT(TranslationContext& ctx, Instr* i) {
|
||||||
static IntCodeFn fns[] = {
|
static IntCodeFn fns[] = {
|
||||||
IntCode_VECTOR_COMPARE_UGT_I8, IntCode_VECTOR_COMPARE_UGT_I16,
|
IntCode_VECTOR_COMPARE_UGT_I8, IntCode_VECTOR_COMPARE_UGT_I16,
|
||||||
|
@ -2379,13 +2380,13 @@ int Translate_VECTOR_COMPARE_UGT(TranslationContext& ctx, Instr* i) {
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t IntCode_VECTOR_COMPARE_UGE_I8(IntCodeState& ics, const IntCode* i){
|
uint32_t IntCode_VECTOR_COMPARE_UGE_I8(IntCodeState& ics, const IntCode* i){
|
||||||
VECTOR_COMPARER(uint8_t, u8, u8, 16, >= )};
|
VECTOR_COMPARER(uint8_t, u8, uint8_t, u8, 16, >= )};
|
||||||
uint32_t IntCode_VECTOR_COMPARE_UGE_I16(IntCodeState& ics, const IntCode* i){
|
uint32_t IntCode_VECTOR_COMPARE_UGE_I16(IntCodeState& ics, const IntCode* i){
|
||||||
VECTOR_COMPARER(uint16_t, u16, u16, 8, >= )};
|
VECTOR_COMPARER(uint16_t, u16, uint16_t, u16, 8, >= )};
|
||||||
uint32_t IntCode_VECTOR_COMPARE_UGE_I32(IntCodeState& ics, const IntCode* i){
|
uint32_t IntCode_VECTOR_COMPARE_UGE_I32(IntCodeState& ics, const IntCode* i){
|
||||||
VECTOR_COMPARER(uint32_t, u32, u32, 4, >= )};
|
VECTOR_COMPARER(uint32_t, u32, uint32_t, u32, 4, >= )};
|
||||||
uint32_t IntCode_VECTOR_COMPARE_UGE_F32(IntCodeState& ics, const IntCode* i){
|
uint32_t IntCode_VECTOR_COMPARE_UGE_F32(IntCodeState& ics, const IntCode* i){
|
||||||
VECTOR_COMPARER(float, f32, u32, 4, >= )};
|
VECTOR_COMPARER(float, f32, uint32_t, u32, 4, >= )};
|
||||||
int Translate_VECTOR_COMPARE_UGE(TranslationContext& ctx, Instr* i) {
|
int Translate_VECTOR_COMPARE_UGE(TranslationContext& ctx, Instr* i) {
|
||||||
static IntCodeFn fns[] = {
|
static IntCodeFn fns[] = {
|
||||||
IntCode_VECTOR_COMPARE_UGE_I8, IntCode_VECTOR_COMPARE_UGE_I16,
|
IntCode_VECTOR_COMPARE_UGE_I8, IntCode_VECTOR_COMPARE_UGE_I16,
|
||||||
|
|
Loading…
Reference in New Issue