mirror of
https://git.eden-emu.dev/eden-emu/eden
synced 2026-04-10 05:28:56 +02:00
fsck
This commit is contained in:
parent
69ac655a62
commit
3abfd2f2d7
1 changed files with 76 additions and 19 deletions
|
|
@ -2113,26 +2113,83 @@ void EmitFPVectorToFixed(BlockOfCode& code, EmitContext& ctx, IR::Inst* inst) {
|
||||||
ctx.reg_alloc.DefineValue(code, inst, src);
|
ctx.reg_alloc.DefineValue(code, inst, src);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
auto const fpt_fn = [fbits, rounding]{
|
auto const fpt_fn = [fbits, rounding]() -> void (*)(VectorArray<mcl::unsigned_integer_of_size<fsize>>& output, const VectorArray<mcl::unsigned_integer_of_size<fsize>>& input, FP::FPCR fpcr, FP::FPSR& fpsr) {
|
||||||
#define ROUNDING_MODE(CASE) \
|
#define ROUNDING_MODE_CASE(CASE, N) \
|
||||||
else if (rounding == FP::RoundingMode::CASE && fsize == 8 && fbits == 8) return &EmitFPVectorToFixedThunk<fsize, unsigned_, FP::RoundingMode::CASE, 8>; \
|
else if (rounding == FP::RoundingMode::CASE && fsize >= (N) && fbits == (N)) return &EmitFPVectorToFixedThunk<fsize, unsigned_, FP::RoundingMode::CASE, N>;
|
||||||
else if (rounding == FP::RoundingMode::CASE && fsize == 16 && fbits == 8) return &EmitFPVectorToFixedThunk<fsize, unsigned_, FP::RoundingMode::CASE, 8>; \
|
#define ROUNDING_MODE_SWITCH(CASE) \
|
||||||
else if (rounding == FP::RoundingMode::CASE && fsize == 16 && fbits == 16) return &EmitFPVectorToFixedThunk<fsize, unsigned_, FP::RoundingMode::CASE, 16>; \
|
ROUNDING_MODE_CASE(CASE, 0x00) \
|
||||||
else if (rounding == FP::RoundingMode::CASE && fsize == 32 && fbits == 8) return &EmitFPVectorToFixedThunk<fsize, unsigned_, FP::RoundingMode::CASE, 8>; \
|
ROUNDING_MODE_CASE(CASE, 0x01) \
|
||||||
else if (rounding == FP::RoundingMode::CASE && fsize == 32 && fbits == 16) return &EmitFPVectorToFixedThunk<fsize, unsigned_, FP::RoundingMode::CASE, 16>; \
|
ROUNDING_MODE_CASE(CASE, 0x02) \
|
||||||
else if (rounding == FP::RoundingMode::CASE && fsize == 32 && fbits == 32) return &EmitFPVectorToFixedThunk<fsize, unsigned_, FP::RoundingMode::CASE, 32>; \
|
ROUNDING_MODE_CASE(CASE, 0x03) \
|
||||||
else if (rounding == FP::RoundingMode::CASE && fsize == 64 && fbits == 8) return &EmitFPVectorToFixedThunk<fsize, unsigned_, FP::RoundingMode::CASE, 8>; \
|
ROUNDING_MODE_CASE(CASE, 0x04) \
|
||||||
else if (rounding == FP::RoundingMode::CASE && fsize == 64 && fbits == 16) return &EmitFPVectorToFixedThunk<fsize, unsigned_, FP::RoundingMode::CASE, 16>; \
|
ROUNDING_MODE_CASE(CASE, 0x05) \
|
||||||
else if (rounding == FP::RoundingMode::CASE && fsize == 64 && fbits == 32) return &EmitFPVectorToFixedThunk<fsize, unsigned_, FP::RoundingMode::CASE, 32>; \
|
ROUNDING_MODE_CASE(CASE, 0x06) \
|
||||||
else if (rounding == FP::RoundingMode::CASE && fsize == 64 && fbits == 64) return &EmitFPVectorToFixedThunk<fsize, unsigned_, FP::RoundingMode::CASE, 64>;
|
ROUNDING_MODE_CASE(CASE, 0x07) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x08) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x09) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x0a) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x0b) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x0c) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x0d) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x0e) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x0f) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x10) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x11) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x12) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x13) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x14) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x15) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x16) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x17) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x18) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x19) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x1a) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x1b) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x1c) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x1d) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x1e) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x1f) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x20) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x21) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x22) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x23) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x24) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x25) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x26) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x27) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x28) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x29) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x2a) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x2b) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x2c) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x2d) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x2e) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x2f) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x30) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x31) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x32) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x33) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x34) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x35) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x36) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x37) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x38) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x39) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x3a) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x3b) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x3c) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x3d) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x3e) \
|
||||||
|
ROUNDING_MODE_CASE(CASE, 0x3f)
|
||||||
if (false) { /* ... */ }
|
if (false) { /* ... */ }
|
||||||
ROUNDING_MODE(ToNearest_TieEven)
|
ROUNDING_MODE_SWITCH(ToNearest_TieEven)
|
||||||
ROUNDING_MODE(TowardsPlusInfinity)
|
ROUNDING_MODE_SWITCH(TowardsPlusInfinity)
|
||||||
ROUNDING_MODE(TowardsMinusInfinity)
|
ROUNDING_MODE_SWITCH(TowardsMinusInfinity)
|
||||||
ROUNDING_MODE(TowardsZero)
|
ROUNDING_MODE_SWITCH(TowardsZero)
|
||||||
ROUNDING_MODE(ToNearest_TieAwayFromZero)
|
ROUNDING_MODE_SWITCH(ToNearest_TieAwayFromZero)
|
||||||
else return &EmitFPVectorToFixedThunk<fsize, unsigned_, FP::RoundingMode::TowardsZero, 64>;
|
#undef ROUNDING_MODE_SWITCH
|
||||||
|
#undef ROUNDING_MODE_CASE
|
||||||
|
else return nullptr;
|
||||||
}();
|
}();
|
||||||
|
|
||||||
EmitTwoOpFallback<3>(code, ctx, inst, fpt_fn);
|
EmitTwoOpFallback<3>(code, ctx, inst, fpt_fn);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue