@@ -28,3 +28,69 @@
PADDI 000001 10 0--.-- .................. \
001110 ..... ..... ................ @PLS_D
+
+### Prefixed No-operation Instruction
+
+&PNOP invalid_suffix:bool
+@PNOP 000001 11 0000-- 000000000000000000 \
+ ................................ &PNOP
+
+{
+ ## Invalid suffixes: Branch instruction
+ # bc[l][a]
+ PNOP ................................ \
+ 010000-------------------------- @PNOP invalid_suffix=1
+ # b[l][a]
+ PNOP ................................ \
+ 010010-------------------------- @PNOP invalid_suffix=1
+ # bclr[l]
+ PNOP ................................ \
+ 010011---------------0000010000- @PNOP invalid_suffix=1
+ # bcctr[l]
+ PNOP ................................ \
+ 010011---------------1000010000- @PNOP invalid_suffix=1
+ # bctar[l]
+ PNOP ................................ \
+ 010011---------------1000110000- @PNOP invalid_suffix=1
+
+ ## Invalid suffixes: rfebb
+ PNOP ................................ \
+ 010011---------------0010010010- @PNOP invalid_suffix=1
+
+ ## Invalid suffixes: context synchronizing other than isync
+ # sc
+ PNOP ................................ \
+ 010001------------------------1- @PNOP invalid_suffix=1
+ # scv
+ PNOP ................................ \
+ 010001------------------------01 @PNOP invalid_suffix=1
+ # rfscv
+ PNOP ................................ \
+ 010011---------------0001010010- @PNOP invalid_suffix=1
+ # rfid
+ PNOP ................................ \
+ 010011---------------0000010010- @PNOP invalid_suffix=1
+ # hrfid
+ PNOP ................................ \
+ 010011---------------0100010010- @PNOP invalid_suffix=1
+ # urfid
+ PNOP ................................ \
+ 010011---------------0100110010- @PNOP invalid_suffix=1
+ # stop
+ PNOP ................................ \
+ 010011---------------0101110010- @PNOP invalid_suffix=1
+ # mtmsr w/ L=0
+ PNOP ................................ \
+ 011111---------0-----0010010010- @PNOP invalid_suffix=1
+ # mtmsrd w/ L=0
+ PNOP ................................ \
+ 011111---------0-----0010110010- @PNOP invalid_suffix=1
+
+ ## Invalid suffixes: Service Processor Attention
+ PNOP ................................ \
+ 000000----------------100000000- @PNOP invalid_suffix=1
+
+ ## Valid suffixes
+ PNOP ................................ \
+ -------------------------------- @PNOP invalid_suffix=0
+}
@@ -60,3 +60,11 @@ static bool trans_ADDIS(DisasContext *ctx, arg_D *a)
a->si <<= 16;
return trans_ADDI(ctx, a);
}
+
+static bool trans_PNOP(DisasContext *ctx, arg_PNOP *a)
+{
+ if (a->invalid_suffix) {
+ gen_invalid(ctx);
+ }
+ return true;
+}