MCPcopy Create free account
hub / github.com/danoon2/Boxedwine / decode

Method decode

source/emulation/cpu/decoder.cpp:4647–4682  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

4645class DecodeFPU3 : public DecodeFunc {
4646public:
4647 void decode(DecodeData* data, DecodedOp* op) const override {
4648 U8 rm = data->fetch8();
4649
4650 if (rm >= 0xc0) {
4651 op->reg = E(rm);
4652 switch ((rm >> 3) & 7) {
4653 case 0: op->inst = FCMOV_ST0_STj_NCF; break;
4654 case 1: op->inst = FCMOV_ST0_STj_NZF; break;
4655 case 2: op->inst = FCMOV_ST0_STj_NCF_AND_NZF; break;
4656 case 3: op->inst = FCMOV_ST0_STj_NPF; break;
4657 case 4:
4658 {
4659 switch (rm & 7) {
4660 case 2:op->inst = FNCLEX; break;
4661 case 3:op->inst = FNINIT; break;
4662 default:op->inst = Invalid; op->reg = rm; op->imm = data->inst; break;
4663 }
4664 break;
4665 }
4666 case 5: op->inst = FUCOMI_ST0_STj; break;
4667 case 6: op->inst = FCOMI_ST0_STj; break;
4668 default:op->inst = Invalid; op->reg = rm; op->imm = data->inst; break;
4669 }
4670 } else {
4671 decodeEa(data, op, rm);
4672 switch ((rm >> 3) & 7) {
4673 case 0: op->inst = FILD_DWORD_INTEGER; break;
4674 case 1: op->inst = FISTTP32; break;
4675 case 2: op->inst = FIST_DWORD_INTEGER; break;
4676 case 3: op->inst = FIST_DWORD_INTEGER_Pop; break;
4677 case 5: op->inst = FLD_EXTENDED_REAL; break;
4678 case 7: op->inst = FSTP_EXTENDED_REAL; break;
4679 default:op->inst = Invalid; op->reg = rm; op->imm = data->inst; break;
4680 }
4681 }
4682 }
4683};
4684
4685class DecodeFPU4 : public DecodeFunc {

Callers

nothing calls this directly

Calls 2

decodeEaFunction · 0.85
fetch8Method · 0.80

Tested by

no test coverage detected