aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXavier Leroy <xavier.leroy@college-de-france.fr>2019-04-14 10:45:58 +0200
committerXavier Leroy <xavierleroy@users.noreply.github.com>2019-05-20 18:00:46 +0200
commit72ab6ad1dcf13dd61d3bdb896660b0f399e9f8a5 (patch)
treee6747bed65fb8927fa5a840e31a7bdaa2bfc67af
parent3830a91a4711c4570394e02e93e4e08db88eac6f (diff)
downloadcompcert-72ab6ad1dcf13dd61d3bdb896660b0f399e9f8a5.tar.gz
compcert-72ab6ad1dcf13dd61d3bdb896660b0f399e9f8a5.zip
Give a semantics to the Pisel instruction
-rw-r--r--powerpc/Asm.v8
1 files changed, 7 insertions, 1 deletions
diff --git a/powerpc/Asm.v b/powerpc/Asm.v
index ad24f563..748058c4 100644
--- a/powerpc/Asm.v
+++ b/powerpc/Asm.v
@@ -860,6 +860,13 @@ Definition exec_instr (f: function) (i: instruction) (rs: regset) (m: mem) : out
Next (nextinstr (rs#rd <- (Val.subf rs#r1 rs#r2))) m
| Pfsubs rd r1 r2 =>
Next (nextinstr (rs#rd <- (Val.subfs rs#r1 rs#r2))) m
+ | Pisel rd r1 r2 bit =>
+ let v :=
+ match rs#(reg_of_crbit bit) with
+ | Vint n => if Int.eq n Int.zero then rs#r2 else rs#r1
+ | _ => Vundef
+ end in
+ Next (nextinstr (rs#rd <- v)) m
| Plbz rd cst r1 =>
load1 Mint8unsigned rd cst r1 rs m
| Plbzx rd r1 r2 =>
@@ -1073,7 +1080,6 @@ Definition exec_instr (f: function) (i: instruction) (rs: regset) (m: mem) : out
| Pfrsqrte _ _
| Pfres _ _
| Pfsel _ _ _ _
- | Pisel _ _ _ _
| Plwarx _ _ _
| Plwbrx _ _ _
| Picbi _ _