handles all for opcode 19
| 829 | |
| 830 | // handles all for opcode 19 |
| 831 | std::string PowerPCDisassembler::Opcode19Handler(const u32 binary) |
| 832 | { |
| 833 | u32 d = ValueAtBits(binary, 6, 5); |
| 834 | u32 a = ValueAtBits(binary, 11, 5); |
| 835 | u32 b = ValueAtBits(binary, 16, 5); |
| 836 | |
| 837 | u32 ext_10 = ValueAtBits(binary, 21, 10); |
| 838 | |
| 839 | if (ext_10 != 16 && ext_10 != 528 && ((binary & 1) == 1)) |
| 840 | return ILL(binary); |
| 841 | |
| 842 | switch (ext_10) |
| 843 | { |
| 844 | case 0: |
| 845 | if ((b == 0) && ((d & 3) == 0) && ((a & 3) == 0)) |
| 846 | return "mcrf " + Alias(d >> 2, "cr") + ", " + Alias(a >> 2, "cr"); |
| 847 | return ILL(binary); |
| 848 | case 16: |
| 849 | return Opcode19HandlerExt16(binary, "lr"); |
| 850 | case 33: |
| 851 | if (a == b) |
| 852 | return "crnot " + TS(d) + ", " + TS(a); |
| 853 | return "crnor " + TS(d) + ", " + TS(a) + ", " + TS(b); |
| 854 | case 50: |
| 855 | if (binary == 0x4c000064) |
| 856 | return "rfi"; |
| 857 | return ILL(binary); |
| 858 | case 129: |
| 859 | return "crandc " + TS(d) + ", " + TS(a) + ", " + TS(b); |
| 860 | case 150: |
| 861 | if (binary == 0x4c00012c) |
| 862 | return "isync"; |
| 863 | return ILL(binary); |
| 864 | case 193: |
| 865 | if (a == b) |
| 866 | return "crclr " + TS(d) + ", " + TS(a); |
| 867 | return "crxor " + TS(d) + ", " + TS(a) + ", " + TS(b); |
| 868 | case 225: |
| 869 | return "crnand " + TS(d) + ", " + TS(a) + ", " + TS(b); |
| 870 | case 257: |
| 871 | return "crand " + TS(d) + ", " + TS(a) + ", " + TS(b); |
| 872 | case 289: |
| 873 | if (a == b) |
| 874 | return "crset " + TS(d) + ", " + TS(a); |
| 875 | return "creqv " + TS(d) + ", " + TS(a) + ", " + TS(b); |
| 876 | case 417: |
| 877 | return "crorc " + TS(d) + ", " + TS(a) + ", " + TS(b); |
| 878 | case 449: |
| 879 | if (a == b) |
| 880 | return "crmove " + TS(d) + ", " + TS(a); |
| 881 | return "cror " + TS(d) + ", " + TS(a) + ", " + TS(b); |
| 882 | case 528: |
| 883 | return Opcode19HandlerExt16(binary, "ctr"); |
| 884 | default: |
| 885 | return ILL(binary); |
| 886 | } |
| 887 | } |
| 888 |
nothing calls this directly
no outgoing calls
no test coverage detected