For ISA 3.0 and beyond, the instructions also write the XER register.
Split the instructions out to a new command line option so we can create
an ISA 2.07 expect file, ISA 3.0 LE and ISA 3.0 BE expect file. The new
command line option is "-s" to just run just these four instructions.
442061 very slow execution under Fedora 34 (readdwarf3)
443031 Gcc -many change requires explicit .machine directives
443033 Add support for the ISA 3.0 mcrxrx instruction
+443034 Sraw, srawi, srad, sradi, mfs
To see details of a given bug, visit
https://bugs.kde.org/show_bug.cgi?id=XXXXXX
/*
Integer Shift Instructions
*/
-static Bool dis_int_shift ( UInt prefix, UInt theInstr )
+static Bool dis_int_shift ( UInt prefix, UInt theInstr, UInt allow_isa_3_0 )
{
/* X-Form, XS-Form */
UChar opc1 = ifieldOPC(theInstr);
mkexpr(sh_amt)) ) );
assign( rA, mkWidenFrom32(ty, e_tmp, /* Signed */True) );
+ /* Set CA bit */
set_XER_CA_CA32( ty, PPCG_FLAG_OP_SRAW,
mkexpr(rA),
mkWidenFrom32(ty, mkexpr(rS_lo32), True),
mkWidenFrom32(ty, mkexpr(sh_amt), True ),
mkWidenFrom32(ty, getXER_CA_32(), True) );
+
+ if (allow_isa_3_0)
+ /* copy CA to CA32 */
+ putXER_CA32( unop(Iop_32to8, getXER_CA_32()));
break;
}
mkU8(sh_imm)) );
}
+ /* Set CA bit */
set_XER_CA_CA32( ty, PPCG_FLAG_OP_SRAWI,
mkexpr(rA),
mkWidenFrom32(ty, mkexpr(rS_lo32), /* Syned */True),
mkSzImm(ty, sh_imm),
mkWidenFrom32(ty, getXER_CA_32(), /* Syned */False) );
+
+ if (allow_isa_3_0)
+ /* copy CA to CA32 */
+ putXER_CA32( unop(Iop_32to8, getXER_CA_32()));
break;
case 0x218: // srw (Shift Right Word, PPC32 p508)
mkU64(63),
mkexpr(sh_amt)) ))
);
+ /* Set CA bit */
set_XER_CA_CA32( ty, PPCG_FLAG_OP_SRAD,
mkexpr(rA), mkexpr(rS), mkexpr(sh_amt),
mkWidenFrom32(ty, getXER_CA_32(), /* Syned */False) );
+
+ if (allow_isa_3_0)
+ /* copy CA to CA32 */
+ putXER_CA32( unop(Iop_32to8, getXER_CA_32()));
break;
}
flag_rC ? ".":"", rA_addr, rS_addr, sh_imm);
assign( rA, binop(Iop_Sar64, getIReg(rS_addr), mkU8(sh_imm)) );
+ /* Set CA bit */
set_XER_CA_CA32( ty, PPCG_FLAG_OP_SRADI,
mkexpr(rA),
getIReg(rS_addr),
mkU64(sh_imm),
mkWidenFrom32(ty, getXER_CA_32(), /* Syned */False) );
+
+ if (allow_isa_3_0)
+ /* copy CA to CA32 */
+ putXER_CA32( unop(Iop_32to8, getXER_CA_32()));
break;
case 0x21B: // srd (Shift Right DWord, PPC64 p574)
/* Integer Shift Instructions */
case 0x018: case 0x318: case 0x338: // slw, sraw, srawi
case 0x218: // srw
- if (dis_int_shift( prefix, theInstr )) goto decode_success;
+ if (dis_int_shift( prefix, theInstr, allow_isa_3_0 ))
+ goto decode_success;
goto decode_failure;
/* 64bit Integer Shift Instructions */
case 0x33A: case 0x33B: // sradi
case 0x21B: // srd
if (!mode64) goto decode_failure;
- if (dis_int_shift( prefix, theInstr )) goto decode_success;
+ if (dis_int_shift( prefix, theInstr, allow_isa_3_0 ))
+ goto decode_success;
goto decode_failure;
/* Integer Load Instructions */
bug139050-ppc32.stdout.exp bug139050-ppc32.stderr.exp \
bug139050-ppc32.vgtest \
ldstrev.stderr.exp ldstrev.stdout.exp ldstrev.vgtest \
+ jm-int-sh_algebraic.stderr.exp jm-int-sh_algebraic.stdout.exp \
+ jm-int-sh_algebraic.vgtest \
jm-int.stderr.exp jm-int.stdout.exp jm-int.vgtest \
jm-int_other.stderr.exp jm-int_other.stdout.exp jm-int_other.vgtest \
jm-fp.stderr.exp jm-fp.stdout.exp jm-fp.vgtest jm-fp.stdout.exp-BE2 \
PPC_ALTIVEC = 0x00040000,
PPC_FALTIVEC = 0x00050000,
PPC_MISC = 0x00060000,
+ PPC_SH_ALGEBRAIC = 0x00070000,
PPC_FAMILY = 0x000F0000,
/* Flags: these may be combined, so use separate bitfields. */
PPC_CR = 0x01000000,
}
#endif // #ifdef __powerpc64__
+static test_t tests_il_ops_two_sh[] = {
+ { &test_sraw , " sraw", },
+#ifdef __powerpc64__
+ { &test_srad , " srad", },
+#endif // #ifdef __powerpc64__
+ { NULL, NULL, },
+};
+
static test_t tests_il_ops_two[] = {
{ &test_and , " and", },
{ &test_andc , " andc", },
{ &test_orc , " orc", },
{ &test_xor , " xor", },
{ &test_slw , " slw", },
- { &test_sraw , " sraw", },
{ &test_srw , " srw", },
#ifdef __powerpc64__
{ &test_sld , " sld", },
- { &test_srad , " srad", },
{ &test_srd , " srd", },
#endif // #ifdef __powerpc64__
{ NULL, NULL, },
}
#endif // #ifdef __powerpc64__
+static test_t tests_ilr_ops_two_sh[] = {
+ { &test_sraw_ , " sraw.", },
+#ifdef __powerpc64__
+ { &test_srad_ , " srad.", },
+#endif // #ifdef __powerpc64__
+ { NULL, NULL, },
+};
+
static test_t tests_ilr_ops_two[] = {
{ &test_and_ , " and.", },
{ &test_andc_ , " andc.", },
{ &test_orc_ , " orc.", },
{ &test_xor_ , " xor.", },
{ &test_slw_ , " slw.", },
- { &test_sraw_ , " sraw.", },
{ &test_srw_ , " srw.", },
#ifdef __powerpc64__
{ &test_sld_ , " sld.", },
- { &test_srad_ , " srad.", },
{ &test_srd_ , " srd.", },
#endif // #ifdef __powerpc64__
{ NULL, NULL, },
ASSEMBLY_FUNC("test_sradi", "sradi 17, 14, 0");
#endif // #ifdef __powerpc64__
+static test_t tests_il_ops_spe_sh[] = {
+ { &test_srawi , " srawi", },
+#ifdef __powerpc64__
+ { &test_sradi , " sradi", },
+#endif // #ifdef __powerpc64__
+ { NULL, NULL, },
+};
static test_t tests_il_ops_spe[] = {
{ &test_rlwimi , " rlwimi", },
{ &test_rlwinm , " rlwinm", },
{ &test_rlwnm , " rlwnm", },
- { &test_srawi , " srawi", },
{ &test_mfcr , " mfcr", },
{ &test_mfspr , " mfspr", },
{ &test_mtspr , " mtspr", },
{ &test_rldicl , " rldicl", },
{ &test_rldicr , " rldicr", },
{ &test_rldimi , " rldimi", },
- { &test_sradi , " sradi", },
#endif // #ifdef __powerpc64__
{ NULL, NULL, },
};
ASSEMBLY_FUNC("test_sradi_", "sradi. 17, 14, 0");
#endif // #ifdef __powerpc64__
+static test_t tests_ilr_ops_spe_sh[] = {
+ { &test_srawi_ , " srawi.", },
+#ifdef __powerpc64__
+ { &test_sradi_ , " sradi.", },
+#endif // #ifdef __powerpc64__
+ { NULL, NULL, },
+};
static test_t tests_ilr_ops_spe[] = {
{ &test_rlwimi_ , " rlwimi.", },
{ &test_rlwinm_ , " rlwinm.", },
{ &test_rlwnm_ , " rlwnm.", },
- { &test_srawi_ , " srawi.", },
{ &test_mcrf , " mcrf", },
{ &test_mcrxr , " mcrxr", },
{ &test_mtcrf , " mtcrf", },
{ &test_rldicl_ , " rldicl.", },
{ &test_rldicr_ , " rldicr.", },
{ &test_rldimi_ , " rldimi.", },
- { &test_sradi_ , " sradi.", },
#endif // #ifdef __powerpc64__
{ NULL, NULL, },
};
"PPC integer logical insns with two args",
0x00010202,
},
+ {
+ tests_il_ops_two_sh ,
+ "PPC integer shift algebraic two args",
+ 0x00070202,
+ },
{
tests_ilr_ops_two ,
"PPC integer logical insns with two args with flags update",
0x01010202,
},
+ {
+ tests_ilr_ops_two_sh ,
+ "PPC integer shift algebraic two args with flags update",
+ 0x01070202,
+ },
{
tests_icr_ops_two ,
"PPC integer compare insns (two args)",
"PPC logical insns with special forms",
0x00010207,
},
+ {
+ tests_il_ops_spe_sh ,
+ "PPC shift algebraic with special forms",
+ 0x00070207,
+ },
{
tests_ilr_ops_spe ,
"PPC logical insns with special forms with flags update",
0x01010207,
},
+ {
+ tests_ilr_ops_spe_sh ,
+ "PPC shift algebraic with special forms with flags update",
+ 0x01070207,
+ },
{
tests_ild_ops_two_i16 ,
"PPC integer load insns\n with one register + one 16 bits immediate args with flags update",
/* Used in do_tests, indexed by flags->nb_args
Elements correspond to enum test_flags::num args
*/
+static test_loop_t int_sh_algebraic[] = {
+ &test_int_two_args,
+ &test_int_special,
+};
+
static test_loop_t int_loops[] = {
&test_int_one_arg,
&test_int_two_args,
typedef struct insn_sel_flags_t_struct {
int one_arg, two_args, three_args;
int arith, logical, compare, ldst;
- int integer, floats, p405, altivec, faltivec, misc;
+ int integer, floats, p405, altivec, faltivec, misc, sh_algebraic;
int cr;
} insn_sel_flags_t;
(family == PPC_405 && !seln_flags.p405) ||
(family == PPC_ALTIVEC && !seln_flags.altivec) ||
(family == PPC_MISC && !seln_flags.misc) ||
+ (family == PPC_SH_ALGEBRAIC && !seln_flags.sh_algebraic) ||
(family == PPC_FALTIVEC && !seln_flags.faltivec))
continue;
/* Check flags update */
case PPC_INTEGER:
loop = &int_loops[nb_args - 1];
break;
+ case PPC_SH_ALGEBRAIC:
+ loop = &int_sh_algebraic[0];
+ break;
case PPC_MISC:
loop = &misc_loops[0];
break;
"\t-f: test floating point instructions\n"
"\t-a: test altivec instructions\n"
"\t-m: test miscellaneous instructions\n"
+ "\t-s: test shift algebraic (sraw, srawi, srad, sradi) instructions\n"
"\t-A: test all (int, fp, altivec) instructions\n"
"\t-v: be verbose\n"
"\t-h: display this help and exit\n"
flags.altivec = 0;
flags.faltivec = 0;
flags.cr = -1;
+ flags.sh_algebraic = 0;
while ((c = getopt(argc, argv, "123t:f:n:r:uvh")) != -1) {
switch (c) {
flags.p405 = 1;
flags.altivec = 1;
flags.faltivec = 1;
+ flags.algebraic = 1;
}
// Default cr update
if (flags.cr == -1)
flags.p405 = 0;
flags.altivec = 0;
flags.faltivec = 0;
+ flags.sh_algebraic = 0;
// Flags
flags.cr = 2;
- while ((c = getopt(argc, argv, "ilcLfmahvA")) != -1) {
+ while ((c = getopt(argc, argv, "ilcLfmsahvA")) != -1) {
switch (c) {
case 'i':
flags.arith = 1;
flags.integer = 1;
break;
+ case 's':
+ flags.logical = 1;
+ flags.sh_algebraic = 1;
+ break;
case 'l':
flags.logical = 1;
flags.integer = 1;
printf(" p405 = %d\n", flags.p405);
printf(" altivec = %d\n", flags.altivec);
printf(" faltivec = %d\n", flags.faltivec);
+ printf(" sh_algebraic = %d\n", flags.sh_algebraic);
printf(" cr update: \n");
printf(" cr = %d\n", flags.cr);
printf("\n");
--- /dev/null
+PPC integer shift algebraic two args:
+ sraw 00000000, 00000000 => 00000000 (00000000 00000000)
+ sraw 00000000, 000f423f => 00000000 (00000000 00000000)
+ sraw 00000000, ffffffff => 00000000 (00000000 00000000)
+ sraw 000f423f, 00000000 => 000f423f (00000000 00000000)
+ sraw 000f423f, 000f423f => 00000000 (00000000 00000000)
+ sraw 000f423f, ffffffff => 00000000 (00000000 00000000)
+ sraw ffffffff, 00000000 => ffffffff (00000000 00000000)
+ sraw ffffffff, 000f423f => ffffffff (00000000 20000000)
+ sraw ffffffff, ffffffff => ffffffff (00000000 20000000)
+
+PPC integer shift algebraic two args with flags update:
+ sraw. 00000000, 00000000 => 00000000 (20000000 00000000)
+ sraw. 00000000, 000f423f => 00000000 (20000000 00000000)
+ sraw. 00000000, ffffffff => 00000000 (20000000 00000000)
+ sraw. 000f423f, 00000000 => 000f423f (40000000 00000000)
+ sraw. 000f423f, 000f423f => 00000000 (20000000 00000000)
+ sraw. 000f423f, ffffffff => 00000000 (20000000 00000000)
+ sraw. ffffffff, 00000000 => ffffffff (80000000 00000000)
+ sraw. ffffffff, 000f423f => ffffffff (80000000 20000000)
+ sraw. ffffffff, ffffffff => ffffffff (80000000 20000000)
+
+PPC shift algebraic with special forms:
+ srawi 00000000, 00000000 => 00000000 (00000000 00000000)
+ srawi 00000000, 000f423f => 00000000 (00000000 00000000)
+ srawi 00000000, ffffffff => 00000000 (00000000 00000000)
+ srawi 000f423f, 00000000 => 000f423f (00000000 00000000)
+ srawi 000f423f, 000f423f => 000f423f (00000000 00000000)
+ srawi 000f423f, ffffffff => 000f423f (00000000 00000000)
+ srawi ffffffff, 00000000 => ffffffff (00000000 00000000)
+ srawi ffffffff, 000f423f => ffffffff (00000000 00000000)
+ srawi ffffffff, ffffffff => ffffffff (00000000 00000000)
+
+PPC shift algebraic with special forms with flags update:
+ srawi. 00000000, 00000000 => 00000000 (20000000 00000000)
+ srawi. 00000000, 000f423f => 00000000 (20000000 00000000)
+ srawi. 00000000, ffffffff => 00000000 (20000000 00000000)
+ srawi. 000f423f, 00000000 => 000f423f (40000000 00000000)
+ srawi. 000f423f, 000f423f => 000f423f (40000000 00000000)
+ srawi. 000f423f, ffffffff => 000f423f (40000000 00000000)
+ srawi. ffffffff, 00000000 => ffffffff (80000000 00000000)
+ srawi. ffffffff, 000f423f => ffffffff (80000000 00000000)
+ srawi. ffffffff, ffffffff => ffffffff (80000000 00000000)
+
+All done. Tested 4 different instructions
--- /dev/null
+prog: jm-insns -s
slw ffffffff, 000f423f => 00000000 (00000000 00000000)
slw ffffffff, ffffffff => 00000000 (00000000 00000000)
- sraw 00000000, 00000000 => 00000000 (00000000 00000000)
- sraw 00000000, 000f423f => 00000000 (00000000 00000000)
- sraw 00000000, ffffffff => 00000000 (00000000 00000000)
- sraw 000f423f, 00000000 => 000f423f (00000000 00000000)
- sraw 000f423f, 000f423f => 00000000 (00000000 00000000)
- sraw 000f423f, ffffffff => 00000000 (00000000 00000000)
- sraw ffffffff, 00000000 => ffffffff (00000000 00000000)
- sraw ffffffff, 000f423f => ffffffff (00000000 20000000)
- sraw ffffffff, ffffffff => ffffffff (00000000 20000000)
-
srw 00000000, 00000000 => 00000000 (00000000 00000000)
srw 00000000, 000f423f => 00000000 (00000000 00000000)
srw 00000000, ffffffff => 00000000 (00000000 00000000)
slw. ffffffff, 000f423f => 00000000 (20000000 00000000)
slw. ffffffff, ffffffff => 00000000 (20000000 00000000)
- sraw. 00000000, 00000000 => 00000000 (20000000 00000000)
- sraw. 00000000, 000f423f => 00000000 (20000000 00000000)
- sraw. 00000000, ffffffff => 00000000 (20000000 00000000)
- sraw. 000f423f, 00000000 => 000f423f (40000000 00000000)
- sraw. 000f423f, 000f423f => 00000000 (20000000 00000000)
- sraw. 000f423f, ffffffff => 00000000 (20000000 00000000)
- sraw. ffffffff, 00000000 => ffffffff (80000000 00000000)
- sraw. ffffffff, 000f423f => ffffffff (80000000 20000000)
- sraw. ffffffff, ffffffff => ffffffff (80000000 20000000)
-
srw. 00000000, 00000000 => 00000000 (20000000 00000000)
srw. 00000000, 000f423f => 00000000 (20000000 00000000)
srw. 00000000, ffffffff => 00000000 (20000000 00000000)
rlwnm ffffffff, ffffffff, 31, 0 => 80000001 (00000000 00000000)
rlwnm ffffffff, ffffffff, 31, 31 => 00000001 (00000000 00000000)
- srawi 00000000, 0 => 00000000 (00000000 00000000)
- srawi 00000000, 31 => 00000000 (00000000 00000000)
- srawi 000f423f, 0 => 000f423f (00000000 00000000)
- srawi 000f423f, 31 => 00000000 (00000000 00000000)
- srawi ffffffff, 0 => ffffffff (00000000 00000000)
- srawi ffffffff, 31 => ffffffff (00000000 20000000)
-
mfcr (00000000) => 00000000 (00000000 00000000)
mfcr (000f423f) => 000f423f (000f423f 00000000)
mfcr (ffffffff) => ffffffff (ffffffff 00000000)
- mfspr 1 (00000000) -> mtxer -> mfxer => 00000000
- mfspr 1 (000f423f) -> mtxer -> mfxer => 0000003f
- mfspr 1 (ffffffff) -> mtxer -> mfxer => e000007f
- mfspr 8 (00000000) -> mtlr -> mflr => 00000000
- mfspr 8 (000f423f) -> mtlr -> mflr => 000f423f
- mfspr 8 (ffffffff) -> mtlr -> mflr => ffffffff
- mfspr 9 (00000000) -> mtctr -> mfctr => 00000000
- mfspr 9 (000f423f) -> mtctr -> mfctr => 000f423f
- mfspr 9 (ffffffff) -> mtctr -> mfctr => ffffffff
-
-
PPC logical insns with special forms with flags update:
rlwimi. 00000000, 0, 0, 0 => 00000000 (20000000 00000000)
rlwimi. 00000000, 0, 0, 31 => 00000000 (20000000 00000000)
rlwnm. ffffffff, ffffffff, 31, 0 => 80000001 (80000000 00000000)
rlwnm. ffffffff, ffffffff, 31, 31 => 00000001 (40000000 00000000)
- srawi. 00000000, 0 => 00000000 (20000000 00000000)
- srawi. 00000000, 31 => 00000000 (20000000 00000000)
- srawi. 000f423f, 0 => 000f423f (40000000 00000000)
- srawi. 000f423f, 31 => 00000000 (20000000 00000000)
- srawi. ffffffff, 0 => ffffffff (80000000 00000000)
- srawi. ffffffff, 31 => ffffffff (80000000 20000000)
-
mcrf 0, 0 (00000000) => (00000000 00000000)
mcrf 0, 7 (00000000) => (00000000 00000000)
mcrf 7, 0 (00000000) => (00000000 00000000)
stwux 000f423f, 4 => 000f423f, 4 (00000000 00000000)
stwux ffffffff, 8 => ffffffff, 8 (00000000 00000000)
-All done. Tested 92 different instructions
+All done. Tested 86 different instructions
EXTRA_DIST = \
jm-int.stderr.exp jm-int.stdout.exp jm-int.vgtest jm-int.stdout.exp-LE \
jm-int.stdout.exp-LE-ISA3_0 \
+ jm-int-sh_algebraic.stderr.exp jm-int-sh_algebraic.stdout.exp \
+ jm-int-sh_algebraic.stdout.exp-LE \
+ jm-int-sh_algebraic.stdout.exp-LE-ISA3_0 \
+ jm-int-sh_algebraic.vgtest \
jm-int_other.stderr.exp jm-int_other.stdout.exp jm-int_other.vgtest \
jm-int_other.stdout.exp-LE \
jm-fp.stderr.exp jm-fp.stdout.exp jm-fp.vgtest jm-fp.stdout.exp-LE jm-fp.stdout.exp-LE2 jm-fp.stdout.exp-BE2 \
--- /dev/null
+PPC integer shift algebraic two args:
+ sraw 0000000000000000, 0000000000000000 => 0000000000000000 (00000000 00000000)
+ sraw 0000000000000000, 0000001cbe991def => 0000000000000000 (00000000 00000000)
+ sraw 0000000000000000, ffffffffffffffff => 0000000000000000 (00000000 00000000)
+ sraw 0000001cbe991def, 0000000000000000 => ffffffffbe991def (00000000 00000000)
+ sraw 0000001cbe991def, 0000001cbe991def => ffffffffffffffff (00000000 20000000)
+ sraw 0000001cbe991def, ffffffffffffffff => ffffffffffffffff (00000000 20000000)
+ sraw ffffffffffffffff, 0000000000000000 => ffffffffffffffff (00000000 00000000)
+ sraw ffffffffffffffff, 0000001cbe991def => ffffffffffffffff (00000000 20000000)
+ sraw ffffffffffffffff, ffffffffffffffff => ffffffffffffffff (00000000 20000000)
+
+ srad 0000000000000000, 0000000000000000 => 0000000000000000 (00000000 00000000)
+ srad 0000000000000000, 0000001cbe991def => 0000000000000000 (00000000 00000000)
+ srad 0000000000000000, ffffffffffffffff => 0000000000000000 (00000000 00000000)
+ srad 0000001cbe991def, 0000000000000000 => 0000001cbe991def (00000000 00000000)
+ srad 0000001cbe991def, 0000001cbe991def => 0000000000000000 (00000000 00000000)
+ srad 0000001cbe991def, ffffffffffffffff => 0000000000000000 (00000000 00000000)
+ srad ffffffffffffffff, 0000000000000000 => ffffffffffffffff (00000000 00000000)
+ srad ffffffffffffffff, 0000001cbe991def => ffffffffffffffff (00000000 20000000)
+ srad ffffffffffffffff, ffffffffffffffff => ffffffffffffffff (00000000 20000000)
+
+PPC integer shift algebraic two args with flags update:
+ sraw. 0000000000000000, 0000000000000000 => 0000000000000000 (20000000 00000000)
+ sraw. 0000000000000000, 0000001cbe991def => 0000000000000000 (20000000 00000000)
+ sraw. 0000000000000000, ffffffffffffffff => 0000000000000000 (20000000 00000000)
+ sraw. 0000001cbe991def, 0000000000000000 => ffffffffbe991def (80000000 00000000)
+ sraw. 0000001cbe991def, 0000001cbe991def => ffffffffffffffff (80000000 20000000)
+ sraw. 0000001cbe991def, ffffffffffffffff => ffffffffffffffff (80000000 20000000)
+ sraw. ffffffffffffffff, 0000000000000000 => ffffffffffffffff (80000000 00000000)
+ sraw. ffffffffffffffff, 0000001cbe991def => ffffffffffffffff (80000000 20000000)
+ sraw. ffffffffffffffff, ffffffffffffffff => ffffffffffffffff (80000000 20000000)
+
+ srad. 0000000000000000, 0000000000000000 => 0000000000000000 (20000000 00000000)
+ srad. 0000000000000000, 0000001cbe991def => 0000000000000000 (20000000 00000000)
+ srad. 0000000000000000, ffffffffffffffff => 0000000000000000 (20000000 00000000)
+ srad. 0000001cbe991def, 0000000000000000 => 0000001cbe991def (40000000 00000000)
+ srad. 0000001cbe991def, 0000001cbe991def => 0000000000000000 (20000000 00000000)
+ srad. 0000001cbe991def, ffffffffffffffff => 0000000000000000 (20000000 00000000)
+ srad. ffffffffffffffff, 0000000000000000 => ffffffffffffffff (80000000 00000000)
+ srad. ffffffffffffffff, 0000001cbe991def => ffffffffffffffff (80000000 20000000)
+ srad. ffffffffffffffff, ffffffffffffffff => ffffffffffffffff (80000000 20000000)
+
+PPC shift algebraic with special forms:
+ srawi 0000000000000000, 0000000000000000 => 0000000000000000 (00000000 00000000)
+ srawi 0000000000000000, 0000001cbe991def => 0000000000000000 (00000000 00000000)
+ srawi 0000000000000000, ffffffffffffffff => 0000000000000000 (00000000 00000000)
+ srawi 0000001cbe991def, 0000000000000000 => ffffffffbe991def (00000000 00000000)
+ srawi 0000001cbe991def, 0000001cbe991def => ffffffffbe991def (00000000 00000000)
+ srawi 0000001cbe991def, ffffffffffffffff => ffffffffbe991def (00000000 00000000)
+ srawi ffffffffffffffff, 0000000000000000 => ffffffffffffffff (00000000 00000000)
+ srawi ffffffffffffffff, 0000001cbe991def => ffffffffffffffff (00000000 00000000)
+ srawi ffffffffffffffff, ffffffffffffffff => ffffffffffffffff (00000000 00000000)
+
+ sradi 0000000000000000, 0000000000000000 => 0000000000000000 (00000000 00000000)
+ sradi 0000000000000000, 0000001cbe991def => 0000000000000000 (00000000 00000000)
+ sradi 0000000000000000, ffffffffffffffff => 0000000000000000 (00000000 00000000)
+ sradi 0000001cbe991def, 0000000000000000 => 0000001cbe991def (00000000 00000000)
+ sradi 0000001cbe991def, 0000001cbe991def => 0000001cbe991def (00000000 00000000)
+ sradi 0000001cbe991def, ffffffffffffffff => 0000001cbe991def (00000000 00000000)
+ sradi ffffffffffffffff, 0000000000000000 => ffffffffffffffff (00000000 00000000)
+ sradi ffffffffffffffff, 0000001cbe991def => ffffffffffffffff (00000000 00000000)
+ sradi ffffffffffffffff, ffffffffffffffff => ffffffffffffffff (00000000 00000000)
+
+PPC shift algebraic with special forms with flags update:
+ srawi. 0000000000000000, 0000000000000000 => 0000000000000000 (20000000 00000000)
+ srawi. 0000000000000000, 0000001cbe991def => 0000000000000000 (20000000 00000000)
+ srawi. 0000000000000000, ffffffffffffffff => 0000000000000000 (20000000 00000000)
+ srawi. 0000001cbe991def, 0000000000000000 => ffffffffbe991def (80000000 00000000)
+ srawi. 0000001cbe991def, 0000001cbe991def => ffffffffbe991def (80000000 00000000)
+ srawi. 0000001cbe991def, ffffffffffffffff => ffffffffbe991def (80000000 00000000)
+ srawi. ffffffffffffffff, 0000000000000000 => ffffffffffffffff (80000000 00000000)
+ srawi. ffffffffffffffff, 0000001cbe991def => ffffffffffffffff (80000000 00000000)
+ srawi. ffffffffffffffff, ffffffffffffffff => ffffffffffffffff (80000000 00000000)
+
+ sradi. 0000000000000000, 0000000000000000 => 0000000000000000 (20000000 00000000)
+ sradi. 0000000000000000, 0000001cbe991def => 0000000000000000 (20000000 00000000)
+ sradi. 0000000000000000, ffffffffffffffff => 0000000000000000 (20000000 00000000)
+ sradi. 0000001cbe991def, 0000000000000000 => 0000001cbe991def (40000000 00000000)
+ sradi. 0000001cbe991def, 0000001cbe991def => 0000001cbe991def (40000000 00000000)
+ sradi. 0000001cbe991def, ffffffffffffffff => 0000001cbe991def (40000000 00000000)
+ sradi. ffffffffffffffff, 0000000000000000 => ffffffffffffffff (80000000 00000000)
+ sradi. ffffffffffffffff, 0000001cbe991def => ffffffffffffffff (80000000 00000000)
+ sradi. ffffffffffffffff, ffffffffffffffff => ffffffffffffffff (80000000 00000000)
+
+All done. Tested 8 different instructions
--- /dev/null
+PPC integer shift algebraic two args:
+ sraw 0000000000000000, 0000000000000000 => 0000000000000000 (00000000 00000000)
+ sraw 0000000000000000, 0000001cbe991def => 0000000000000000 (00000000 00000000)
+ sraw 0000000000000000, ffffffffffffffff => 0000000000000000 (00000000 00000000)
+ sraw 0000001cbe991def, 0000000000000000 => ffffffffbe991def (00000000 00000000)
+ sraw 0000001cbe991def, 0000001cbe991def => ffffffffffffffff (00000000 20000000)
+ sraw 0000001cbe991def, ffffffffffffffff => ffffffffffffffff (00000000 20000000)
+ sraw ffffffffffffffff, 0000000000000000 => ffffffffffffffff (00000000 00000000)
+ sraw ffffffffffffffff, 0000001cbe991def => ffffffffffffffff (00000000 20000000)
+ sraw ffffffffffffffff, ffffffffffffffff => ffffffffffffffff (00000000 20000000)
+
+ srad 0000000000000000, 0000000000000000 => 0000000000000000 (00000000 00000000)
+ srad 0000000000000000, 0000001cbe991def => 0000000000000000 (00000000 00000000)
+ srad 0000000000000000, ffffffffffffffff => 0000000000000000 (00000000 00000000)
+ srad 0000001cbe991def, 0000000000000000 => 0000001cbe991def (00000000 00000000)
+ srad 0000001cbe991def, 0000001cbe991def => 0000000000000000 (00000000 00000000)
+ srad 0000001cbe991def, ffffffffffffffff => 0000000000000000 (00000000 00000000)
+ srad ffffffffffffffff, 0000000000000000 => ffffffffffffffff (00000000 00000000)
+ srad ffffffffffffffff, 0000001cbe991def => ffffffffffffffff (00000000 20000000)
+ srad ffffffffffffffff, ffffffffffffffff => ffffffffffffffff (00000000 20000000)
+
+PPC integer shift algebraic two args with flags update:
+ sraw. 0000000000000000, 0000000000000000 => 0000000000000000 (20000000 00000000)
+ sraw. 0000000000000000, 0000001cbe991def => 0000000000000000 (20000000 00000000)
+ sraw. 0000000000000000, ffffffffffffffff => 0000000000000000 (20000000 00000000)
+ sraw. 0000001cbe991def, 0000000000000000 => ffffffffbe991def (80000000 00000000)
+ sraw. 0000001cbe991def, 0000001cbe991def => ffffffffffffffff (80000000 20000000)
+ sraw. 0000001cbe991def, ffffffffffffffff => ffffffffffffffff (80000000 20000000)
+ sraw. ffffffffffffffff, 0000000000000000 => ffffffffffffffff (80000000 00000000)
+ sraw. ffffffffffffffff, 0000001cbe991def => ffffffffffffffff (80000000 20000000)
+ sraw. ffffffffffffffff, ffffffffffffffff => ffffffffffffffff (80000000 20000000)
+
+ srad. 0000000000000000, 0000000000000000 => 0000000000000000 (20000000 00000000)
+ srad. 0000000000000000, 0000001cbe991def => 0000000000000000 (20000000 00000000)
+ srad. 0000000000000000, ffffffffffffffff => 0000000000000000 (20000000 00000000)
+ srad. 0000001cbe991def, 0000000000000000 => 0000001cbe991def (40000000 00000000)
+ srad. 0000001cbe991def, 0000001cbe991def => 0000000000000000 (20000000 00000000)
+ srad. 0000001cbe991def, ffffffffffffffff => 0000000000000000 (20000000 00000000)
+ srad. ffffffffffffffff, 0000000000000000 => ffffffffffffffff (80000000 00000000)
+ srad. ffffffffffffffff, 0000001cbe991def => ffffffffffffffff (80000000 20000000)
+ srad. ffffffffffffffff, ffffffffffffffff => ffffffffffffffff (80000000 20000000)
+
+PPC shift algebraic with special forms:
+ srawi 0000000000000000, 0000000000000000 => 0000000000000000 (00000000 00000000)
+ srawi 0000000000000000, 0000001cbe991def => 0000000000000000 (00000000 00000000)
+ srawi 0000000000000000, ffffffffffffffff => 0000000000000000 (00000000 00000000)
+ srawi 0000001cbe991def, 0000000000000000 => ffffffffbe991def (00000000 00000000)
+ srawi 0000001cbe991def, 0000001cbe991def => ffffffffbe991def (00000000 00000000)
+ srawi 0000001cbe991def, ffffffffffffffff => ffffffffbe991def (00000000 00000000)
+ srawi ffffffffffffffff, 0000000000000000 => ffffffffffffffff (00000000 00000000)
+ srawi ffffffffffffffff, 0000001cbe991def => ffffffffffffffff (00000000 00000000)
+ srawi ffffffffffffffff, ffffffffffffffff => ffffffffffffffff (00000000 00000000)
+
+ sradi 0000000000000000, 0000000000000000 => 0000000000000000 (00000000 00000000)
+ sradi 0000000000000000, 0000001cbe991def => 0000000000000000 (00000000 00000000)
+ sradi 0000000000000000, ffffffffffffffff => 0000000000000000 (00000000 00000000)
+ sradi 0000001cbe991def, 0000000000000000 => 0000001cbe991def (00000000 00000000)
+ sradi 0000001cbe991def, 0000001cbe991def => 0000001cbe991def (00000000 00000000)
+ sradi 0000001cbe991def, ffffffffffffffff => 0000001cbe991def (00000000 00000000)
+ sradi ffffffffffffffff, 0000000000000000 => ffffffffffffffff (00000000 00000000)
+ sradi ffffffffffffffff, 0000001cbe991def => ffffffffffffffff (00000000 00000000)
+ sradi ffffffffffffffff, ffffffffffffffff => ffffffffffffffff (00000000 00000000)
+
+PPC shift algebraic with special forms with flags update:
+ srawi. 0000000000000000, 0000000000000000 => 0000000000000000 (20000000 00000000)
+ srawi. 0000000000000000, 0000001cbe991def => 0000000000000000 (20000000 00000000)
+ srawi. 0000000000000000, ffffffffffffffff => 0000000000000000 (20000000 00000000)
+ srawi. 0000001cbe991def, 0000000000000000 => ffffffffbe991def (80000000 00000000)
+ srawi. 0000001cbe991def, 0000001cbe991def => ffffffffbe991def (80000000 00000000)
+ srawi. 0000001cbe991def, ffffffffffffffff => ffffffffbe991def (80000000 00000000)
+ srawi. ffffffffffffffff, 0000000000000000 => ffffffffffffffff (80000000 00000000)
+ srawi. ffffffffffffffff, 0000001cbe991def => ffffffffffffffff (80000000 00000000)
+ srawi. ffffffffffffffff, ffffffffffffffff => ffffffffffffffff (80000000 00000000)
+
+ sradi. 0000000000000000, 0000000000000000 => 0000000000000000 (20000000 00000000)
+ sradi. 0000000000000000, 0000001cbe991def => 0000000000000000 (20000000 00000000)
+ sradi. 0000000000000000, ffffffffffffffff => 0000000000000000 (20000000 00000000)
+ sradi. 0000001cbe991def, 0000000000000000 => 0000001cbe991def (40000000 00000000)
+ sradi. 0000001cbe991def, 0000001cbe991def => 0000001cbe991def (40000000 00000000)
+ sradi. 0000001cbe991def, ffffffffffffffff => 0000001cbe991def (40000000 00000000)
+ sradi. ffffffffffffffff, 0000000000000000 => ffffffffffffffff (80000000 00000000)
+ sradi. ffffffffffffffff, 0000001cbe991def => ffffffffffffffff (80000000 00000000)
+ sradi. ffffffffffffffff, ffffffffffffffff => ffffffffffffffff (80000000 00000000)
+
+All done. Tested 8 different instructions
--- /dev/null
+PPC integer shift algebraic two args:
+ sraw 0000000000000000, 0000000000000000 => 0000000000000000 (00000000 00000000)
+ sraw 0000000000000000, 0000001cbe991def => 0000000000000000 (00000000 00000000)
+ sraw 0000000000000000, ffffffffffffffff => 0000000000000000 (00000000 00000000)
+ sraw 0000001cbe991def, 0000000000000000 => ffffffffbe991def (00000000 00000000)
+ sraw 0000001cbe991def, 0000001cbe991def => ffffffffffffffff (00000000 20040000)
+ sraw 0000001cbe991def, ffffffffffffffff => ffffffffffffffff (00000000 20040000)
+ sraw ffffffffffffffff, 0000000000000000 => ffffffffffffffff (00000000 00000000)
+ sraw ffffffffffffffff, 0000001cbe991def => ffffffffffffffff (00000000 20040000)
+ sraw ffffffffffffffff, ffffffffffffffff => ffffffffffffffff (00000000 20040000)
+
+ srad 0000000000000000, 0000000000000000 => 0000000000000000 (00000000 00000000)
+ srad 0000000000000000, 0000001cbe991def => 0000000000000000 (00000000 00000000)
+ srad 0000000000000000, ffffffffffffffff => 0000000000000000 (00000000 00000000)
+ srad 0000001cbe991def, 0000000000000000 => 0000001cbe991def (00000000 00000000)
+ srad 0000001cbe991def, 0000001cbe991def => 0000000000000000 (00000000 00000000)
+ srad 0000001cbe991def, ffffffffffffffff => 0000000000000000 (00000000 00000000)
+ srad ffffffffffffffff, 0000000000000000 => ffffffffffffffff (00000000 00000000)
+ srad ffffffffffffffff, 0000001cbe991def => ffffffffffffffff (00000000 20040000)
+ srad ffffffffffffffff, ffffffffffffffff => ffffffffffffffff (00000000 20040000)
+
+PPC integer shift algebraic two args with flags update:
+ sraw. 0000000000000000, 0000000000000000 => 0000000000000000 (20000000 00000000)
+ sraw. 0000000000000000, 0000001cbe991def => 0000000000000000 (20000000 00000000)
+ sraw. 0000000000000000, ffffffffffffffff => 0000000000000000 (20000000 00000000)
+ sraw. 0000001cbe991def, 0000000000000000 => ffffffffbe991def (80000000 00000000)
+ sraw. 0000001cbe991def, 0000001cbe991def => ffffffffffffffff (80000000 20040000)
+ sraw. 0000001cbe991def, ffffffffffffffff => ffffffffffffffff (80000000 20040000)
+ sraw. ffffffffffffffff, 0000000000000000 => ffffffffffffffff (80000000 00000000)
+ sraw. ffffffffffffffff, 0000001cbe991def => ffffffffffffffff (80000000 20040000)
+ sraw. ffffffffffffffff, ffffffffffffffff => ffffffffffffffff (80000000 20040000)
+
+ srad. 0000000000000000, 0000000000000000 => 0000000000000000 (20000000 00000000)
+ srad. 0000000000000000, 0000001cbe991def => 0000000000000000 (20000000 00000000)
+ srad. 0000000000000000, ffffffffffffffff => 0000000000000000 (20000000 00000000)
+ srad. 0000001cbe991def, 0000000000000000 => 0000001cbe991def (40000000 00000000)
+ srad. 0000001cbe991def, 0000001cbe991def => 0000000000000000 (20000000 00000000)
+ srad. 0000001cbe991def, ffffffffffffffff => 0000000000000000 (20000000 00000000)
+ srad. ffffffffffffffff, 0000000000000000 => ffffffffffffffff (80000000 00000000)
+ srad. ffffffffffffffff, 0000001cbe991def => ffffffffffffffff (80000000 20040000)
+ srad. ffffffffffffffff, ffffffffffffffff => ffffffffffffffff (80000000 20040000)
+
+PPC shift algebraic with special forms:
+ srawi 0000000000000000, 0000000000000000 => 0000000000000000 (00000000 00000000)
+ srawi 0000000000000000, 0000001cbe991def => 0000000000000000 (00000000 00000000)
+ srawi 0000000000000000, ffffffffffffffff => 0000000000000000 (00000000 00000000)
+ srawi 0000001cbe991def, 0000000000000000 => ffffffffbe991def (00000000 00000000)
+ srawi 0000001cbe991def, 0000001cbe991def => ffffffffbe991def (00000000 00000000)
+ srawi 0000001cbe991def, ffffffffffffffff => ffffffffbe991def (00000000 00000000)
+ srawi ffffffffffffffff, 0000000000000000 => ffffffffffffffff (00000000 00000000)
+ srawi ffffffffffffffff, 0000001cbe991def => ffffffffffffffff (00000000 00000000)
+ srawi ffffffffffffffff, ffffffffffffffff => ffffffffffffffff (00000000 00000000)
+
+ sradi 0000000000000000, 0000000000000000 => 0000000000000000 (00000000 00000000)
+ sradi 0000000000000000, 0000001cbe991def => 0000000000000000 (00000000 00000000)
+ sradi 0000000000000000, ffffffffffffffff => 0000000000000000 (00000000 00000000)
+ sradi 0000001cbe991def, 0000000000000000 => 0000001cbe991def (00000000 00000000)
+ sradi 0000001cbe991def, 0000001cbe991def => 0000001cbe991def (00000000 00000000)
+ sradi 0000001cbe991def, ffffffffffffffff => 0000001cbe991def (00000000 00000000)
+ sradi ffffffffffffffff, 0000000000000000 => ffffffffffffffff (00000000 00000000)
+ sradi ffffffffffffffff, 0000001cbe991def => ffffffffffffffff (00000000 00000000)
+ sradi ffffffffffffffff, ffffffffffffffff => ffffffffffffffff (00000000 00000000)
+
+PPC shift algebraic with special forms with flags update:
+ srawi. 0000000000000000, 0000000000000000 => 0000000000000000 (20000000 00000000)
+ srawi. 0000000000000000, 0000001cbe991def => 0000000000000000 (20000000 00000000)
+ srawi. 0000000000000000, ffffffffffffffff => 0000000000000000 (20000000 00000000)
+ srawi. 0000001cbe991def, 0000000000000000 => ffffffffbe991def (80000000 00000000)
+ srawi. 0000001cbe991def, 0000001cbe991def => ffffffffbe991def (80000000 00000000)
+ srawi. 0000001cbe991def, ffffffffffffffff => ffffffffbe991def (80000000 00000000)
+ srawi. ffffffffffffffff, 0000000000000000 => ffffffffffffffff (80000000 00000000)
+ srawi. ffffffffffffffff, 0000001cbe991def => ffffffffffffffff (80000000 00000000)
+ srawi. ffffffffffffffff, ffffffffffffffff => ffffffffffffffff (80000000 00000000)
+
+ sradi. 0000000000000000, 0000000000000000 => 0000000000000000 (20000000 00000000)
+ sradi. 0000000000000000, 0000001cbe991def => 0000000000000000 (20000000 00000000)
+ sradi. 0000000000000000, ffffffffffffffff => 0000000000000000 (20000000 00000000)
+ sradi. 0000001cbe991def, 0000000000000000 => 0000001cbe991def (40000000 00000000)
+ sradi. 0000001cbe991def, 0000001cbe991def => 0000001cbe991def (40000000 00000000)
+ sradi. 0000001cbe991def, ffffffffffffffff => 0000001cbe991def (40000000 00000000)
+ sradi. ffffffffffffffff, 0000000000000000 => ffffffffffffffff (80000000 00000000)
+ sradi. ffffffffffffffff, 0000001cbe991def => ffffffffffffffff (80000000 00000000)
+ sradi. ffffffffffffffff, ffffffffffffffff => ffffffffffffffff (80000000 00000000)
+
+All done. Tested 8 different instructions
--- /dev/null
+prog: jm-insns -s
slw ffffffffffffffff, 0000001cbe991def => 0000000000000000 (00000000 00000000)
slw ffffffffffffffff, ffffffffffffffff => 0000000000000000 (00000000 00000000)
- sraw 0000000000000000, 0000000000000000 => 0000000000000000 (00000000 00000000)
- sraw 0000000000000000, 0000001cbe991def => 0000000000000000 (00000000 00000000)
- sraw 0000000000000000, ffffffffffffffff => 0000000000000000 (00000000 00000000)
- sraw 0000001cbe991def, 0000000000000000 => ffffffffbe991def (00000000 00000000)
- sraw 0000001cbe991def, 0000001cbe991def => ffffffffffffffff (00000000 20000000)
- sraw 0000001cbe991def, ffffffffffffffff => ffffffffffffffff (00000000 20000000)
- sraw ffffffffffffffff, 0000000000000000 => ffffffffffffffff (00000000 00000000)
- sraw ffffffffffffffff, 0000001cbe991def => ffffffffffffffff (00000000 20000000)
- sraw ffffffffffffffff, ffffffffffffffff => ffffffffffffffff (00000000 20000000)
-
srw 0000000000000000, 0000000000000000 => 0000000000000000 (00000000 00000000)
srw 0000000000000000, 0000001cbe991def => 0000000000000000 (00000000 00000000)
srw 0000000000000000, ffffffffffffffff => 0000000000000000 (00000000 00000000)
sld ffffffffffffffff, 0000001cbe991def => 0000000000000000 (00000000 00000000)
sld ffffffffffffffff, ffffffffffffffff => 0000000000000000 (00000000 00000000)
- srad 0000000000000000, 0000000000000000 => 0000000000000000 (00000000 00000000)
- srad 0000000000000000, 0000001cbe991def => 0000000000000000 (00000000 00000000)
- srad 0000000000000000, ffffffffffffffff => 0000000000000000 (00000000 00000000)
- srad 0000001cbe991def, 0000000000000000 => 0000001cbe991def (00000000 00000000)
- srad 0000001cbe991def, 0000001cbe991def => 0000000000000000 (00000000 00000000)
- srad 0000001cbe991def, ffffffffffffffff => 0000000000000000 (00000000 00000000)
- srad ffffffffffffffff, 0000000000000000 => ffffffffffffffff (00000000 00000000)
- srad ffffffffffffffff, 0000001cbe991def => ffffffffffffffff (00000000 20000000)
- srad ffffffffffffffff, ffffffffffffffff => ffffffffffffffff (00000000 20000000)
-
srd 0000000000000000, 0000000000000000 => 0000000000000000 (00000000 00000000)
srd 0000000000000000, 0000001cbe991def => 0000000000000000 (00000000 00000000)
srd 0000000000000000, ffffffffffffffff => 0000000000000000 (00000000 00000000)
slw. ffffffffffffffff, 0000001cbe991def => 0000000000000000 (20000000 00000000)
slw. ffffffffffffffff, ffffffffffffffff => 0000000000000000 (20000000 00000000)
- sraw. 0000000000000000, 0000000000000000 => 0000000000000000 (20000000 00000000)
- sraw. 0000000000000000, 0000001cbe991def => 0000000000000000 (20000000 00000000)
- sraw. 0000000000000000, ffffffffffffffff => 0000000000000000 (20000000 00000000)
- sraw. 0000001cbe991def, 0000000000000000 => ffffffffbe991def (80000000 00000000)
- sraw. 0000001cbe991def, 0000001cbe991def => ffffffffffffffff (80000000 20000000)
- sraw. 0000001cbe991def, ffffffffffffffff => ffffffffffffffff (80000000 20000000)
- sraw. ffffffffffffffff, 0000000000000000 => ffffffffffffffff (80000000 00000000)
- sraw. ffffffffffffffff, 0000001cbe991def => ffffffffffffffff (80000000 20000000)
- sraw. ffffffffffffffff, ffffffffffffffff => ffffffffffffffff (80000000 20000000)
-
srw. 0000000000000000, 0000000000000000 => 0000000000000000 (20000000 00000000)
srw. 0000000000000000, 0000001cbe991def => 0000000000000000 (20000000 00000000)
srw. 0000000000000000, ffffffffffffffff => 0000000000000000 (20000000 00000000)
sld. ffffffffffffffff, 0000001cbe991def => 0000000000000000 (20000000 00000000)
sld. ffffffffffffffff, ffffffffffffffff => 0000000000000000 (20000000 00000000)
- srad. 0000000000000000, 0000000000000000 => 0000000000000000 (20000000 00000000)
- srad. 0000000000000000, 0000001cbe991def => 0000000000000000 (20000000 00000000)
- srad. 0000000000000000, ffffffffffffffff => 0000000000000000 (20000000 00000000)
- srad. 0000001cbe991def, 0000000000000000 => 0000001cbe991def (40000000 00000000)
- srad. 0000001cbe991def, 0000001cbe991def => 0000000000000000 (20000000 00000000)
- srad. 0000001cbe991def, ffffffffffffffff => 0000000000000000 (20000000 00000000)
- srad. ffffffffffffffff, 0000000000000000 => ffffffffffffffff (80000000 00000000)
- srad. ffffffffffffffff, 0000001cbe991def => ffffffffffffffff (80000000 20000000)
- srad. ffffffffffffffff, ffffffffffffffff => ffffffffffffffff (80000000 20000000)
-
srd. 0000000000000000, 0000000000000000 => 0000000000000000 (20000000 00000000)
srd. 0000000000000000, 0000001cbe991def => 0000000000000000 (20000000 00000000)
srd. 0000000000000000, ffffffffffffffff => 0000000000000000 (20000000 00000000)
rlwnm ffffffffffffffff, ffffffffffffffff, 31, 0 => ffffffff80000001 (00000000 00000000)
rlwnm ffffffffffffffff, ffffffffffffffff, 31, 31 => 0000000000000001 (00000000 00000000)
- srawi 0000000000000000, 0 => 0000000000000000 (00000000 00000000)
- srawi 0000000000000000, 31 => 0000000000000000 (00000000 00000000)
- srawi 0000001cbe991def, 0 => ffffffffbe991def (00000000 00000000)
- srawi 0000001cbe991def, 31 => ffffffffffffffff (00000000 20000000)
- srawi ffffffffffffffff, 0 => ffffffffffffffff (00000000 00000000)
- srawi ffffffffffffffff, 31 => ffffffffffffffff (00000000 20000000)
-
mfcr (0000000000000000) => 0000000000000000 (00000000 00000000)
mfcr (0000001cbe991def) => 00000000be991def (be991def 00000000)
mfcr (ffffffffffffffff) => 00000000ffffffff (ffffffff 00000000)
- mfspr 1 (00000000) -> mtxer -> mfxer => 0000000000000000
- mfspr 1 (be991def) -> mtxer -> mfxer => 00000000a000006f
- mfspr 1 (ffffffff) -> mtxer -> mfxer => 00000000e000007f
- mfspr 8 (00000000) -> mtlr -> mflr => 0000000000000000
- mfspr 8 (be991def) -> mtlr -> mflr => ffffffffbe991def
- mfspr 8 (ffffffff) -> mtlr -> mflr => ffffffffffffffff
- mfspr 9 (00000000) -> mtctr -> mfctr => 0000000000000000
- mfspr 9 (be991def) -> mtctr -> mfctr => ffffffffbe991def
- mfspr 9 (ffffffff) -> mtctr -> mfctr => ffffffffffffffff
-
-
rldcl 0000000000000000, 0000000000000000, 0 => 0000000000000000 (00000000 00000000)
rldcl 0000000000000000, 0000000000000000, 7 => 0000000000000000 (00000000 00000000)
rldcl 0000000000000000, 0000000000000000, 14 => 0000000000000000 (00000000 00000000)
rldimi ffffffffffffffff, 63, 56 => ffffffffffffffff (00000000 00000000)
rldimi ffffffffffffffff, 63, 63 => ffffffffffffffff (00000000 00000000)
- sradi 0000000000000000, 0 => 0000000000000000 (00000000 00000000)
- sradi 0000000000000000, 7 => 0000000000000000 (00000000 00000000)
- sradi 0000000000000000, 14 => 0000000000000000 (00000000 00000000)
- sradi 0000000000000000, 21 => 0000000000000000 (00000000 00000000)
- sradi 0000000000000000, 28 => 0000000000000000 (00000000 00000000)
- sradi 0000000000000000, 35 => 0000000000000000 (00000000 00000000)
- sradi 0000000000000000, 42 => 0000000000000000 (00000000 00000000)
- sradi 0000000000000000, 49 => 0000000000000000 (00000000 00000000)
- sradi 0000000000000000, 56 => 0000000000000000 (00000000 00000000)
- sradi 0000000000000000, 63 => 0000000000000000 (00000000 00000000)
- sradi 0000001cbe991def, 0 => 0000001cbe991def (00000000 00000000)
- sradi 0000001cbe991def, 7 => 00000000397d323b (00000000 00000000)
- sradi 0000001cbe991def, 14 => 000000000072fa64 (00000000 00000000)
- sradi 0000001cbe991def, 21 => 000000000000e5f4 (00000000 00000000)
- sradi 0000001cbe991def, 28 => 00000000000001cb (00000000 00000000)
- sradi 0000001cbe991def, 35 => 0000000000000003 (00000000 00000000)
- sradi 0000001cbe991def, 42 => 0000000000000000 (00000000 00000000)
- sradi 0000001cbe991def, 49 => 0000000000000000 (00000000 00000000)
- sradi 0000001cbe991def, 56 => 0000000000000000 (00000000 00000000)
- sradi 0000001cbe991def, 63 => 0000000000000000 (00000000 00000000)
- sradi ffffffffffffffff, 0 => ffffffffffffffff (00000000 00000000)
- sradi ffffffffffffffff, 7 => ffffffffffffffff (00000000 20000000)
- sradi ffffffffffffffff, 14 => ffffffffffffffff (00000000 20000000)
- sradi ffffffffffffffff, 21 => ffffffffffffffff (00000000 20000000)
- sradi ffffffffffffffff, 28 => ffffffffffffffff (00000000 20000000)
- sradi ffffffffffffffff, 35 => ffffffffffffffff (00000000 20000000)
- sradi ffffffffffffffff, 42 => ffffffffffffffff (00000000 20000000)
- sradi ffffffffffffffff, 49 => ffffffffffffffff (00000000 20000000)
- sradi ffffffffffffffff, 56 => ffffffffffffffff (00000000 20000000)
- sradi ffffffffffffffff, 63 => ffffffffffffffff (00000000 20000000)
-
PPC logical insns with special forms with flags update:
rlwimi. 0000000000000000, 0, 0, 0 => 0000000000000000 (20000000 00000000)
rlwimi. 0000000000000000, 0, 0, 31 => 0000000000000000 (20000000 00000000)
rlwnm. ffffffffffffffff, ffffffffffffffff, 31, 0 => ffffffff80000001 (80000000 00000000)
rlwnm. ffffffffffffffff, ffffffffffffffff, 31, 31 => 0000000000000001 (40000000 00000000)
- srawi. 0000000000000000, 0 => 0000000000000000 (20000000 00000000)
- srawi. 0000000000000000, 31 => 0000000000000000 (20000000 00000000)
- srawi. 0000001cbe991def, 0 => ffffffffbe991def (80000000 00000000)
- srawi. 0000001cbe991def, 31 => ffffffffffffffff (80000000 20000000)
- srawi. ffffffffffffffff, 0 => ffffffffffffffff (80000000 00000000)
- srawi. ffffffffffffffff, 31 => ffffffffffffffff (80000000 20000000)
-
mcrf 0, 0 (0000000000000000) => (00000000 00000000)
mcrf 0, 7 (0000000000000000) => (00000000 00000000)
mcrf 7, 0 (0000000000000000) => (00000000 00000000)
rldimi. ffffffffffffffff, 63, 56 => ffffffffffffffff (80000000 00000000)
rldimi. ffffffffffffffff, 63, 63 => ffffffffffffffff (80000000 00000000)
- sradi. 0000000000000000, 0 => 0000000000000000 (20000000 00000000)
- sradi. 0000000000000000, 7 => 0000000000000000 (20000000 00000000)
- sradi. 0000000000000000, 14 => 0000000000000000 (20000000 00000000)
- sradi. 0000000000000000, 21 => 0000000000000000 (20000000 00000000)
- sradi. 0000000000000000, 28 => 0000000000000000 (20000000 00000000)
- sradi. 0000000000000000, 35 => 0000000000000000 (20000000 00000000)
- sradi. 0000000000000000, 42 => 0000000000000000 (20000000 00000000)
- sradi. 0000000000000000, 49 => 0000000000000000 (20000000 00000000)
- sradi. 0000000000000000, 56 => 0000000000000000 (20000000 00000000)
- sradi. 0000000000000000, 63 => 0000000000000000 (20000000 00000000)
- sradi. 0000001cbe991def, 0 => 0000001cbe991def (40000000 00000000)
- sradi. 0000001cbe991def, 7 => 00000000397d323b (40000000 00000000)
- sradi. 0000001cbe991def, 14 => 000000000072fa64 (40000000 00000000)
- sradi. 0000001cbe991def, 21 => 000000000000e5f4 (40000000 00000000)
- sradi. 0000001cbe991def, 28 => 00000000000001cb (40000000 00000000)
- sradi. 0000001cbe991def, 35 => 0000000000000003 (40000000 00000000)
- sradi. 0000001cbe991def, 42 => 0000000000000000 (20000000 00000000)
- sradi. 0000001cbe991def, 49 => 0000000000000000 (20000000 00000000)
- sradi. 0000001cbe991def, 56 => 0000000000000000 (20000000 00000000)
- sradi. 0000001cbe991def, 63 => 0000000000000000 (20000000 00000000)
- sradi. ffffffffffffffff, 0 => ffffffffffffffff (80000000 00000000)
- sradi. ffffffffffffffff, 7 => ffffffffffffffff (80000000 20000000)
- sradi. ffffffffffffffff, 14 => ffffffffffffffff (80000000 20000000)
- sradi. ffffffffffffffff, 21 => ffffffffffffffff (80000000 20000000)
- sradi. ffffffffffffffff, 28 => ffffffffffffffff (80000000 20000000)
- sradi. ffffffffffffffff, 35 => ffffffffffffffff (80000000 20000000)
- sradi. ffffffffffffffff, 42 => ffffffffffffffff (80000000 20000000)
- sradi. ffffffffffffffff, 49 => ffffffffffffffff (80000000 20000000)
- sradi. ffffffffffffffff, 56 => ffffffffffffffff (80000000 20000000)
- sradi. ffffffffffffffff, 63 => ffffffffffffffff (80000000 20000000)
-
PPC integer load insns
with one register + one 16 bits immediate args with flags update:
lbz 0, (0000000000000000) => 0000000000000000, 0 (00000000 00000000)
stdux 0000001cbe991def, 8 => 0000001cbe991def, 8 (00000000 00000000)
stdux ffffffffffffffff, 16 => ffffffffffffffff, 16 (00000000 00000000)
-All done. Tested 131 different instructions
+All done. Tested 121 different instructions
slw ffffffffffffffff, 0000001cbe991def => 0000000000000000 (00000000 00000000)
slw ffffffffffffffff, ffffffffffffffff => 0000000000000000 (00000000 00000000)
- sraw 0000000000000000, 0000000000000000 => 0000000000000000 (00000000 00000000)
- sraw 0000000000000000, 0000001cbe991def => 0000000000000000 (00000000 00000000)
- sraw 0000000000000000, ffffffffffffffff => 0000000000000000 (00000000 00000000)
- sraw 0000001cbe991def, 0000000000000000 => ffffffffbe991def (00000000 00000000)
- sraw 0000001cbe991def, 0000001cbe991def => ffffffffffffffff (00000000 20000000)
- sraw 0000001cbe991def, ffffffffffffffff => ffffffffffffffff (00000000 20000000)
- sraw ffffffffffffffff, 0000000000000000 => ffffffffffffffff (00000000 00000000)
- sraw ffffffffffffffff, 0000001cbe991def => ffffffffffffffff (00000000 20000000)
- sraw ffffffffffffffff, ffffffffffffffff => ffffffffffffffff (00000000 20000000)
-
srw 0000000000000000, 0000000000000000 => 0000000000000000 (00000000 00000000)
srw 0000000000000000, 0000001cbe991def => 0000000000000000 (00000000 00000000)
srw 0000000000000000, ffffffffffffffff => 0000000000000000 (00000000 00000000)
sld ffffffffffffffff, 0000001cbe991def => 0000000000000000 (00000000 00000000)
sld ffffffffffffffff, ffffffffffffffff => 0000000000000000 (00000000 00000000)
- srad 0000000000000000, 0000000000000000 => 0000000000000000 (00000000 00000000)
- srad 0000000000000000, 0000001cbe991def => 0000000000000000 (00000000 00000000)
- srad 0000000000000000, ffffffffffffffff => 0000000000000000 (00000000 00000000)
- srad 0000001cbe991def, 0000000000000000 => 0000001cbe991def (00000000 00000000)
- srad 0000001cbe991def, 0000001cbe991def => 0000000000000000 (00000000 00000000)
- srad 0000001cbe991def, ffffffffffffffff => 0000000000000000 (00000000 00000000)
- srad ffffffffffffffff, 0000000000000000 => ffffffffffffffff (00000000 00000000)
- srad ffffffffffffffff, 0000001cbe991def => ffffffffffffffff (00000000 20000000)
- srad ffffffffffffffff, ffffffffffffffff => ffffffffffffffff (00000000 20000000)
-
srd 0000000000000000, 0000000000000000 => 0000000000000000 (00000000 00000000)
srd 0000000000000000, 0000001cbe991def => 0000000000000000 (00000000 00000000)
srd 0000000000000000, ffffffffffffffff => 0000000000000000 (00000000 00000000)
slw. ffffffffffffffff, 0000001cbe991def => 0000000000000000 (20000000 00000000)
slw. ffffffffffffffff, ffffffffffffffff => 0000000000000000 (20000000 00000000)
- sraw. 0000000000000000, 0000000000000000 => 0000000000000000 (20000000 00000000)
- sraw. 0000000000000000, 0000001cbe991def => 0000000000000000 (20000000 00000000)
- sraw. 0000000000000000, ffffffffffffffff => 0000000000000000 (20000000 00000000)
- sraw. 0000001cbe991def, 0000000000000000 => ffffffffbe991def (80000000 00000000)
- sraw. 0000001cbe991def, 0000001cbe991def => ffffffffffffffff (80000000 20000000)
- sraw. 0000001cbe991def, ffffffffffffffff => ffffffffffffffff (80000000 20000000)
- sraw. ffffffffffffffff, 0000000000000000 => ffffffffffffffff (80000000 00000000)
- sraw. ffffffffffffffff, 0000001cbe991def => ffffffffffffffff (80000000 20000000)
- sraw. ffffffffffffffff, ffffffffffffffff => ffffffffffffffff (80000000 20000000)
-
srw. 0000000000000000, 0000000000000000 => 0000000000000000 (20000000 00000000)
srw. 0000000000000000, 0000001cbe991def => 0000000000000000 (20000000 00000000)
srw. 0000000000000000, ffffffffffffffff => 0000000000000000 (20000000 00000000)
sld. ffffffffffffffff, 0000001cbe991def => 0000000000000000 (20000000 00000000)
sld. ffffffffffffffff, ffffffffffffffff => 0000000000000000 (20000000 00000000)
- srad. 0000000000000000, 0000000000000000 => 0000000000000000 (20000000 00000000)
- srad. 0000000000000000, 0000001cbe991def => 0000000000000000 (20000000 00000000)
- srad. 0000000000000000, ffffffffffffffff => 0000000000000000 (20000000 00000000)
- srad. 0000001cbe991def, 0000000000000000 => 0000001cbe991def (40000000 00000000)
- srad. 0000001cbe991def, 0000001cbe991def => 0000000000000000 (20000000 00000000)
- srad. 0000001cbe991def, ffffffffffffffff => 0000000000000000 (20000000 00000000)
- srad. ffffffffffffffff, 0000000000000000 => ffffffffffffffff (80000000 00000000)
- srad. ffffffffffffffff, 0000001cbe991def => ffffffffffffffff (80000000 20000000)
- srad. ffffffffffffffff, ffffffffffffffff => ffffffffffffffff (80000000 20000000)
-
srd. 0000000000000000, 0000000000000000 => 0000000000000000 (20000000 00000000)
srd. 0000000000000000, 0000001cbe991def => 0000000000000000 (20000000 00000000)
srd. 0000000000000000, ffffffffffffffff => 0000000000000000 (20000000 00000000)
rlwnm ffffffffffffffff, ffffffffffffffff, 31, 0 => ffffffff80000001 (00000000 00000000)
rlwnm ffffffffffffffff, ffffffffffffffff, 31, 31 => 0000000000000001 (00000000 00000000)
- srawi 0000000000000000, 0 => 0000000000000000 (00000000 00000000)
- srawi 0000000000000000, 31 => 0000000000000000 (00000000 00000000)
- srawi 0000001cbe991def, 0 => ffffffffbe991def (00000000 00000000)
- srawi 0000001cbe991def, 31 => ffffffffffffffff (00000000 20000000)
- srawi ffffffffffffffff, 0 => ffffffffffffffff (00000000 00000000)
- srawi ffffffffffffffff, 31 => ffffffffffffffff (00000000 20000000)
-
mfcr (0000000000000000) => 0000000000000000 (00000000 00000000)
mfcr (0000001cbe991def) => 00000000be991def (be991def 00000000)
mfcr (ffffffffffffffff) => 00000000ffffffff (ffffffff 00000000)
rldimi ffffffffffffffff, 63, 56 => ffffffffffffffff (00000000 00000000)
rldimi ffffffffffffffff, 63, 63 => ffffffffffffffff (00000000 00000000)
- sradi 0000000000000000, 0 => 0000000000000000 (00000000 00000000)
- sradi 0000000000000000, 7 => 0000000000000000 (00000000 00000000)
- sradi 0000000000000000, 14 => 0000000000000000 (00000000 00000000)
- sradi 0000000000000000, 21 => 0000000000000000 (00000000 00000000)
- sradi 0000000000000000, 28 => 0000000000000000 (00000000 00000000)
- sradi 0000000000000000, 35 => 0000000000000000 (00000000 00000000)
- sradi 0000000000000000, 42 => 0000000000000000 (00000000 00000000)
- sradi 0000000000000000, 49 => 0000000000000000 (00000000 00000000)
- sradi 0000000000000000, 56 => 0000000000000000 (00000000 00000000)
- sradi 0000000000000000, 63 => 0000000000000000 (00000000 00000000)
- sradi 0000001cbe991def, 0 => 0000001cbe991def (00000000 00000000)
- sradi 0000001cbe991def, 7 => 00000000397d323b (00000000 00000000)
- sradi 0000001cbe991def, 14 => 000000000072fa64 (00000000 00000000)
- sradi 0000001cbe991def, 21 => 000000000000e5f4 (00000000 00000000)
- sradi 0000001cbe991def, 28 => 00000000000001cb (00000000 00000000)
- sradi 0000001cbe991def, 35 => 0000000000000003 (00000000 00000000)
- sradi 0000001cbe991def, 42 => 0000000000000000 (00000000 00000000)
- sradi 0000001cbe991def, 49 => 0000000000000000 (00000000 00000000)
- sradi 0000001cbe991def, 56 => 0000000000000000 (00000000 00000000)
- sradi 0000001cbe991def, 63 => 0000000000000000 (00000000 00000000)
- sradi ffffffffffffffff, 0 => ffffffffffffffff (00000000 00000000)
- sradi ffffffffffffffff, 7 => ffffffffffffffff (00000000 20000000)
- sradi ffffffffffffffff, 14 => ffffffffffffffff (00000000 20000000)
- sradi ffffffffffffffff, 21 => ffffffffffffffff (00000000 20000000)
- sradi ffffffffffffffff, 28 => ffffffffffffffff (00000000 20000000)
- sradi ffffffffffffffff, 35 => ffffffffffffffff (00000000 20000000)
- sradi ffffffffffffffff, 42 => ffffffffffffffff (00000000 20000000)
- sradi ffffffffffffffff, 49 => ffffffffffffffff (00000000 20000000)
- sradi ffffffffffffffff, 56 => ffffffffffffffff (00000000 20000000)
- sradi ffffffffffffffff, 63 => ffffffffffffffff (00000000 20000000)
-
PPC logical insns with special forms with flags update:
rlwimi. 0000000000000000, 0, 0, 0 => 0000000000000000 (20000000 00000000)
rlwimi. 0000000000000000, 0, 0, 31 => 0000000000000000 (20000000 00000000)
rlwnm. ffffffffffffffff, ffffffffffffffff, 31, 0 => ffffffff80000001 (80000000 00000000)
rlwnm. ffffffffffffffff, ffffffffffffffff, 31, 31 => 0000000000000001 (40000000 00000000)
- srawi. 0000000000000000, 0 => 0000000000000000 (20000000 00000000)
- srawi. 0000000000000000, 31 => 0000000000000000 (20000000 00000000)
- srawi. 0000001cbe991def, 0 => ffffffffbe991def (80000000 00000000)
- srawi. 0000001cbe991def, 31 => ffffffffffffffff (80000000 20000000)
- srawi. ffffffffffffffff, 0 => ffffffffffffffff (80000000 00000000)
- srawi. ffffffffffffffff, 31 => ffffffffffffffff (80000000 20000000)
-
mcrf 0, 0 (0000000000000000) => (00000000 00000000)
mcrf 0, 7 (0000000000000000) => (00000000 00000000)
mcrf 7, 0 (0000000000000000) => (00000000 00000000)
rldimi. ffffffffffffffff, 63, 56 => ffffffffffffffff (80000000 00000000)
rldimi. ffffffffffffffff, 63, 63 => ffffffffffffffff (80000000 00000000)
- sradi. 0000000000000000, 0 => 0000000000000000 (20000000 00000000)
- sradi. 0000000000000000, 7 => 0000000000000000 (20000000 00000000)
- sradi. 0000000000000000, 14 => 0000000000000000 (20000000 00000000)
- sradi. 0000000000000000, 21 => 0000000000000000 (20000000 00000000)
- sradi. 0000000000000000, 28 => 0000000000000000 (20000000 00000000)
- sradi. 0000000000000000, 35 => 0000000000000000 (20000000 00000000)
- sradi. 0000000000000000, 42 => 0000000000000000 (20000000 00000000)
- sradi. 0000000000000000, 49 => 0000000000000000 (20000000 00000000)
- sradi. 0000000000000000, 56 => 0000000000000000 (20000000 00000000)
- sradi. 0000000000000000, 63 => 0000000000000000 (20000000 00000000)
- sradi. 0000001cbe991def, 0 => 0000001cbe991def (40000000 00000000)
- sradi. 0000001cbe991def, 7 => 00000000397d323b (40000000 00000000)
- sradi. 0000001cbe991def, 14 => 000000000072fa64 (40000000 00000000)
- sradi. 0000001cbe991def, 21 => 000000000000e5f4 (40000000 00000000)
- sradi. 0000001cbe991def, 28 => 00000000000001cb (40000000 00000000)
- sradi. 0000001cbe991def, 35 => 0000000000000003 (40000000 00000000)
- sradi. 0000001cbe991def, 42 => 0000000000000000 (20000000 00000000)
- sradi. 0000001cbe991def, 49 => 0000000000000000 (20000000 00000000)
- sradi. 0000001cbe991def, 56 => 0000000000000000 (20000000 00000000)
- sradi. 0000001cbe991def, 63 => 0000000000000000 (20000000 00000000)
- sradi. ffffffffffffffff, 0 => ffffffffffffffff (80000000 00000000)
- sradi. ffffffffffffffff, 7 => ffffffffffffffff (80000000 20000000)
- sradi. ffffffffffffffff, 14 => ffffffffffffffff (80000000 20000000)
- sradi. ffffffffffffffff, 21 => ffffffffffffffff (80000000 20000000)
- sradi. ffffffffffffffff, 28 => ffffffffffffffff (80000000 20000000)
- sradi. ffffffffffffffff, 35 => ffffffffffffffff (80000000 20000000)
- sradi. ffffffffffffffff, 42 => ffffffffffffffff (80000000 20000000)
- sradi. ffffffffffffffff, 49 => ffffffffffffffff (80000000 20000000)
- sradi. ffffffffffffffff, 56 => ffffffffffffffff (80000000 20000000)
- sradi. ffffffffffffffff, 63 => ffffffffffffffff (80000000 20000000)
-
PPC integer load insns
with one register + one 16 bits immediate args with flags update:
lbz 0, (0000000000000000) => 0000000000000000, 0 (00000000 00000000)
stdux 0000001cbe991def, 8 => 0000001cbe991def, 8 (00000000 00000000)
stdux ffffffffffffffff, 16 => ffffffffffffffff, 16 (00000000 00000000)
-All done. Tested 131 different instructions
+All done. Tested 123 different instructions