|
|
|
@ -62,291 +62,296 @@ switch((insn.bits >> 0x19) & 0x7f) |
|
|
|
break; |
|
|
|
} |
|
|
|
case 0x68: |
|
|
|
{ |
|
|
|
switch((insn.bits >> 0xc) & 0x7) |
|
|
|
{ |
|
|
|
case 0x2: |
|
|
|
{ |
|
|
|
#include "insns/l_s.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
case 0x3: |
|
|
|
{ |
|
|
|
#include "insns/l_d.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
default: |
|
|
|
{ |
|
|
|
#include "insns/unimp.h" |
|
|
|
} |
|
|
|
} |
|
|
|
break; |
|
|
|
} |
|
|
|
case 0x69: |
|
|
|
{ |
|
|
|
switch((insn.bits >> 0xc) & 0x7) |
|
|
|
{ |
|
|
|
case 0x2: |
|
|
|
{ |
|
|
|
#include "insns/s_s.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
case 0x3: |
|
|
|
{ |
|
|
|
#include "insns/s_d.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
default: |
|
|
|
{ |
|
|
|
#include "insns/unimp.h" |
|
|
|
} |
|
|
|
} |
|
|
|
break; |
|
|
|
} |
|
|
|
case 0x6a: |
|
|
|
{ |
|
|
|
switch((insn.bits >> 0xc) & 0x7) |
|
|
|
{ |
|
|
|
case 0x0: |
|
|
|
{ |
|
|
|
if((insn.bits & 0xfe007fe0) == 0xd0000820) |
|
|
|
if((insn.bits & 0xfe007fe0) == 0xd4000820) |
|
|
|
{ |
|
|
|
#include "insns/c_eq_s.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
if((insn.bits & 0xfe007fe0) == 0xd00000a0) |
|
|
|
if((insn.bits & 0xfe007fe0) == 0xd40000a0) |
|
|
|
{ |
|
|
|
#include "insns/sgninj_s.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd00004c0) |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd40004c0) |
|
|
|
{ |
|
|
|
#include "insns/cvt_s_w.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd0000440) |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd4000440) |
|
|
|
{ |
|
|
|
#include "insns/trunc_w_s.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
if((insn.bits & 0xfe007fe0) == 0xd0000000) |
|
|
|
if((insn.bits & 0xfe007fe0) == 0xd4000000) |
|
|
|
{ |
|
|
|
#include "insns/add_s.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
if((insn.bits & 0xfe007fe0) == 0xd00000c0) |
|
|
|
if((insn.bits & 0xfe007fe0) == 0xd40000c0) |
|
|
|
{ |
|
|
|
#include "insns/sgninjn_s.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd0000400) |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd4000400) |
|
|
|
{ |
|
|
|
#include "insns/trunc_l_s.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd00004e0) |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd40004e0) |
|
|
|
{ |
|
|
|
#include "insns/cvtu_s_w.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd0000420) |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd4000420) |
|
|
|
{ |
|
|
|
#include "insns/truncu_l_s.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd00004a0) |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd40004a0) |
|
|
|
{ |
|
|
|
#include "insns/cvtu_s_l.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
if((insn.bits & 0xfe007fe0) == 0xd0000020) |
|
|
|
if((insn.bits & 0xfe007fe0) == 0xd4000020) |
|
|
|
{ |
|
|
|
#include "insns/sub_s.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd0000080) |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd4000080) |
|
|
|
{ |
|
|
|
#include "insns/sqrt_s.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
if((insn.bits & 0xfe007fe0) == 0xd0000840) |
|
|
|
if((insn.bits & 0xfe007fe0) == 0xd4000840) |
|
|
|
{ |
|
|
|
#include "insns/c_lt_s.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
if((insn.bits & 0xfe007fe0) == 0xd00000e0) |
|
|
|
if((insn.bits & 0xfe007fe0) == 0xd40000e0) |
|
|
|
{ |
|
|
|
#include "insns/sgnmul_s.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd0000480) |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd4000480) |
|
|
|
{ |
|
|
|
#include "insns/cvt_s_l.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
if((insn.bits & 0xfe007fe0) == 0xd0000060) |
|
|
|
if((insn.bits & 0xfe007fe0) == 0xd4000060) |
|
|
|
{ |
|
|
|
#include "insns/div_s.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd0000660) |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd4000660) |
|
|
|
{ |
|
|
|
#include "insns/cvt_s_d.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
if((insn.bits & 0xfe007fe0) == 0xd0000860) |
|
|
|
if((insn.bits & 0xfe007fe0) == 0xd4000860) |
|
|
|
{ |
|
|
|
#include "insns/c_le_s.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
if((insn.bits & 0xfe007fe0) == 0xd0000040) |
|
|
|
if((insn.bits & 0xfe007fe0) == 0xd4000040) |
|
|
|
{ |
|
|
|
#include "insns/mul_s.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd0000460) |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd4000460) |
|
|
|
{ |
|
|
|
#include "insns/truncu_w_s.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
#include "insns/unimp.h" |
|
|
|
} |
|
|
|
case 0x1: |
|
|
|
{ |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd4001400) |
|
|
|
{ |
|
|
|
#include "insns/mffl_d.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd4001420) |
|
|
|
{ |
|
|
|
#include "insns/mffh_d.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd4001800) |
|
|
|
{ |
|
|
|
#include "insns/mff_s.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd4001c00) |
|
|
|
{ |
|
|
|
#include "insns/mtf_s.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
#include "insns/unimp.h" |
|
|
|
} |
|
|
|
case 0x6: |
|
|
|
{ |
|
|
|
if((insn.bits & 0xfe007fe0) == 0xd00060a0) |
|
|
|
if((insn.bits & 0xfe007fe0) == 0xd40060a0) |
|
|
|
{ |
|
|
|
#include "insns/sgninj_d.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
if((insn.bits & 0xfe007fe0) == 0xd0006060) |
|
|
|
if((insn.bits & 0xfe007fe0) == 0xd4006060) |
|
|
|
{ |
|
|
|
#include "insns/div_d.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
if((insn.bits & 0xfe007fe0) == 0xd0006820) |
|
|
|
if((insn.bits & 0xfe007fe0) == 0xd4006820) |
|
|
|
{ |
|
|
|
#include "insns/c_eq_d.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd00064a0) |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd40064a0) |
|
|
|
{ |
|
|
|
#include "insns/cvtu_d_l.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd0006440) |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd4006440) |
|
|
|
{ |
|
|
|
#include "insns/trunc_w_d.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd00064e0) |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd40064e0) |
|
|
|
{ |
|
|
|
#include "insns/cvtu_d_w.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
if((insn.bits & 0xfe007fe0) == 0xd0006000) |
|
|
|
if((insn.bits & 0xfe007fe0) == 0xd4006000) |
|
|
|
{ |
|
|
|
#include "insns/add_d.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
if((insn.bits & 0xfe007fe0) == 0xd0006860) |
|
|
|
if((insn.bits & 0xfe007fe0) == 0xd4006860) |
|
|
|
{ |
|
|
|
#include "insns/c_le_d.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
if((insn.bits & 0xfe007fe0) == 0xd00060e0) |
|
|
|
if((insn.bits & 0xfe007fe0) == 0xd40060e0) |
|
|
|
{ |
|
|
|
#include "insns/sgnmul_d.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
if((insn.bits & 0xfe007fe0) == 0xd00060c0) |
|
|
|
if((insn.bits & 0xfe007fe0) == 0xd40060c0) |
|
|
|
{ |
|
|
|
#include "insns/sgninjn_d.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd0006600) |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd4006600) |
|
|
|
{ |
|
|
|
#include "insns/cvt_d_s.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd0006400) |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd4006400) |
|
|
|
{ |
|
|
|
#include "insns/trunc_l_d.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd0006420) |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd4006420) |
|
|
|
{ |
|
|
|
#include "insns/truncu_l_d.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
if((insn.bits & 0xfe007fe0) == 0xd0006020) |
|
|
|
if((insn.bits & 0xfe007fe0) == 0xd4006020) |
|
|
|
{ |
|
|
|
#include "insns/sub_d.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd0006080) |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd4006080) |
|
|
|
{ |
|
|
|
#include "insns/sqrt_d.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd00064c0) |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd40064c0) |
|
|
|
{ |
|
|
|
#include "insns/cvt_d_w.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd0006480) |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd4006480) |
|
|
|
{ |
|
|
|
#include "insns/cvt_d_l.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd0006460) |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd4006460) |
|
|
|
{ |
|
|
|
#include "insns/truncu_w_d.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
if((insn.bits & 0xfe007fe0) == 0xd0006040) |
|
|
|
if((insn.bits & 0xfe007fe0) == 0xd4006040) |
|
|
|
{ |
|
|
|
#include "insns/mul_d.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
if((insn.bits & 0xfe007fe0) == 0xd0006840) |
|
|
|
if((insn.bits & 0xfe007fe0) == 0xd4006840) |
|
|
|
{ |
|
|
|
#include "insns/c_lt_d.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
#include "insns/unimp.h" |
|
|
|
} |
|
|
|
default: |
|
|
|
{ |
|
|
|
#include "insns/unimp.h" |
|
|
|
} |
|
|
|
} |
|
|
|
break; |
|
|
|
} |
|
|
|
case 0x69: |
|
|
|
{ |
|
|
|
switch((insn.bits >> 0xc) & 0x7) |
|
|
|
{ |
|
|
|
case 0x0: |
|
|
|
{ |
|
|
|
#include "insns/l_s.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
case 0x1: |
|
|
|
{ |
|
|
|
#include "insns/s_s.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
case 0x6: |
|
|
|
{ |
|
|
|
#include "insns/l_d.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
case 0x7: |
|
|
|
{ |
|
|
|
#include "insns/s_d.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
default: |
|
|
|
{ |
|
|
|
#include "insns/unimp.h" |
|
|
|
} |
|
|
|
} |
|
|
|
break; |
|
|
|
} |
|
|
|
case 0x6a: |
|
|
|
{ |
|
|
|
switch((insn.bits >> 0xc) & 0x7) |
|
|
|
{ |
|
|
|
case 0x0: |
|
|
|
{ |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd4000000) |
|
|
|
{ |
|
|
|
#include "insns/mff_s.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd4000800) |
|
|
|
{ |
|
|
|
#include "insns/mtf_s.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
#include "insns/unimp.h" |
|
|
|
} |
|
|
|
case 0x6: |
|
|
|
{ |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd4006000) |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd4007800) |
|
|
|
{ |
|
|
|
#include "insns/mff_d.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd4006400) |
|
|
|
{ |
|
|
|
#include "insns/mffh_d.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
if((insn.bits & 0xfe007fe0) == 0xd4006c00) |
|
|
|
if((insn.bits & 0xfe007fe0) == 0xd4007000) |
|
|
|
{ |
|
|
|
#include "insns/mtflh_d.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd4006800) |
|
|
|
if((insn.bits & 0xfff07fe0) == 0xd4007c00) |
|
|
|
{ |
|
|
|
#include "insns/mtf_d.h" |
|
|
|
break; |
|
|
|
@ -366,12 +371,12 @@ switch((insn.bits >> 0x19) & 0x7f) |
|
|
|
{ |
|
|
|
case 0x0: |
|
|
|
{ |
|
|
|
if((insn.bits & 0xfe007c00) == 0xd6000800) |
|
|
|
if((insn.bits & 0xfe007c00) == 0xd6000c00) |
|
|
|
{ |
|
|
|
#include "insns/nmadd_s.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
if((insn.bits & 0xfe007c00) == 0xd6000c00) |
|
|
|
if((insn.bits & 0xfe007c00) == 0xd6000800) |
|
|
|
{ |
|
|
|
#include "insns/nmsub_s.h" |
|
|
|
break; |
|
|
|
@ -390,12 +395,12 @@ switch((insn.bits >> 0x19) & 0x7f) |
|
|
|
} |
|
|
|
case 0x6: |
|
|
|
{ |
|
|
|
if((insn.bits & 0xfe007c00) == 0xd6006800) |
|
|
|
if((insn.bits & 0xfe007c00) == 0xd6006c00) |
|
|
|
{ |
|
|
|
#include "insns/nmadd_d.h" |
|
|
|
break; |
|
|
|
} |
|
|
|
if((insn.bits & 0xfe007c00) == 0xd6006c00) |
|
|
|
if((insn.bits & 0xfe007c00) == 0xd6006800) |
|
|
|
{ |
|
|
|
#include "insns/nmsub_d.h" |
|
|
|
break; |
|
|
|
|