From 3baf98aa8fe0fff0414772176ce0a0095e8b0b32 Mon Sep 17 00:00:00 2001 From: Cyril SIX Date: Fri, 15 Feb 2019 18:05:54 +0100 Subject: Rajout d'opérateurs flottants, travail sur les tests --> à continuer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mppa_k1c/Asm.v | 28 ++++++- mppa_k1c/Asmblock.v | 39 ++++++++-- mppa_k1c/Asmblockgen.v | 142 +++++++++++------------------------ mppa_k1c/PostpassSchedulingOracle.ml | 45 +++++++++-- mppa_k1c/TargetPrinter.ml | 29 ++++++- test/mppa/instr/Makefile | 2 +- test/mppa/instr/addw.c | 2 +- test/mppa/instr/andd.c | 2 +- test/mppa/instr/andw.c | 2 +- test/mppa/instr/branch.c | 2 +- test/mppa/instr/branchz.c | 2 +- test/mppa/instr/branchzu.c | 2 +- test/mppa/instr/call.c | 2 +- test/mppa/instr/cast_S64_U32.c | 2 +- test/mppa/instr/cast_U32_S64.c | 2 +- test/mppa/instr/cb.deqz.c | 2 +- test/mppa/instr/cb.dgez.c | 2 +- test/mppa/instr/cb.dgtz.c | 2 +- test/mppa/instr/cb.dlez.c | 2 +- test/mppa/instr/cb.dltz.c | 2 +- test/mppa/instr/cb.dnez.c | 2 +- test/mppa/instr/cb.wgez.c | 2 +- test/mppa/instr/cb.wgtz.c | 2 +- test/mppa/instr/cb.wlez.c | 2 +- test/mppa/instr/cb.wltz.c | 2 +- test/mppa/instr/compd.eq.c | 2 +- test/mppa/instr/compd.geu.c | 2 +- test/mppa/instr/compd.gt.c | 2 +- test/mppa/instr/compd.gtu.c | 2 +- test/mppa/instr/compd.le.c | 2 +- test/mppa/instr/compd.leu.c | 2 +- test/mppa/instr/compd.lt.c | 2 +- test/mppa/instr/compd.ltu.c | 2 +- test/mppa/instr/compd.ne.c | 2 +- test/mppa/instr/compw.eq.c | 2 +- test/mppa/instr/compw.geu.c | 2 +- test/mppa/instr/compw.gt.c | 2 +- test/mppa/instr/compw.gtu.c | 2 +- test/mppa/instr/compw.le.c | 2 +- test/mppa/instr/compw.leu.c | 2 +- test/mppa/instr/compw.lt.c | 2 +- test/mppa/instr/compw.ltu.c | 2 +- test/mppa/instr/compw.ne.c | 2 +- test/mppa/instr/div2.c | 2 +- test/mppa/instr/doubleconv.c | 2 +- test/mppa/instr/faddd.c | 5 ++ test/mppa/instr/faddw.c | 5 ++ test/mppa/instr/floatconv.c | 2 +- test/mppa/instr/fmuld.c | 7 ++ test/mppa/instr/fmulw.c | 7 ++ test/mppa/instr/fnegd.c | 7 ++ test/mppa/instr/fnegw.c | 7 ++ test/mppa/instr/for.c | 2 +- test/mppa/instr/forvarl.c | 2 +- test/mppa/instr/framework.h | 30 ++++++-- test/mppa/instr/fsbfd.c | 7 ++ test/mppa/instr/fsbfw.c | 7 ++ test/mppa/instr/indirect_call.c | 2 +- test/mppa/instr/indirect_tailcall.c | 2 +- test/mppa/instr/lbs.c | 2 +- test/mppa/instr/lbz.c | 2 +- test/mppa/instr/muld.c | 2 +- test/mppa/instr/mulw.c | 2 +- test/mppa/instr/negd.c | 2 +- test/mppa/instr/ord.c | 2 +- test/mppa/instr/sbfd.c | 2 +- test/mppa/instr/sbfw.c | 2 +- test/mppa/instr/simple.c | 2 +- test/mppa/instr/sllw.c | 2 +- test/mppa/instr/srad.c | 2 +- test/mppa/instr/srld.c | 2 +- test/mppa/instr/tailcall.c | 2 +- test/mppa/instr/udivd.c | 2 +- test/mppa/instr/umodd.c | 2 +- test/mppa/instr/xord.c | 2 +- 75 files changed, 305 insertions(+), 182 deletions(-) create mode 100644 test/mppa/instr/faddd.c create mode 100644 test/mppa/instr/faddw.c create mode 100644 test/mppa/instr/fmuld.c create mode 100644 test/mppa/instr/fmulw.c create mode 100644 test/mppa/instr/fnegd.c create mode 100644 test/mppa/instr/fnegw.c create mode 100644 test/mppa/instr/fsbfd.c create mode 100644 test/mppa/instr/fsbfw.c diff --git a/mppa_k1c/Asm.v b/mppa_k1c/Asm.v index d7bfaffe..074885f6 100644 --- a/mppa_k1c/Asm.v +++ b/mppa_k1c/Asm.v @@ -94,11 +94,17 @@ Inductive instruction : Type := | Pmv (rd rs: ireg) (**r register move *) | Pnegw (rd rs: ireg) (**r negate word *) | Pnegl (rd rs: ireg) (**r negate long *) - | Pfnegd (rd rs: ireg) (**r float negate double *) | Pcvtl2w (rd rs: ireg) (**r Convert Long to Word *) | Psxwd (rd rs: ireg) (**r Sign Extend Word to Double Word *) | Pzxwd (rd rs: ireg) (**r Zero Extend Word to Double Word *) + | Pfabsd (rd rs: ireg) (**r float absolute double *) + | Pfabsw (rd rs: ireg) (**r float absolute word *) + | Pfnegd (rd rs: ireg) (**r float negate double *) + | Pfnegw (rd rs: ireg) (**r float negate word *) + | Pfnarrowdw (rd rs: ireg) (**r float narrow 64 -> 32 bits *) + | Pfwidenlwd (rd rs: ireg) (**r float widen 32 -> 64 bits *) | Pfloatwrnsz (rd rs: ireg) (**r Floating Point Conversion from integer *) + | Pfloatudrnsz (rd rs: ireg) (**r Floating Point Conversion from unsigned integer (64 bits) *) | Pfloatdrnsz (rd rs: ireg) (**r Floating Point Conversion from integer (64 bits) *) | Pfixedwrzz (rd rs: ireg) (**r Integer conversion from floating point *) | Pfixeddrzz (rd rs: ireg) (**r Integer conversion from floating point (64 bits) *) @@ -139,6 +145,13 @@ Inductive instruction : Type := | Psrll (rd rs1 rs2: ireg) (**r shift right logical long *) | Psral (rd rs1 rs2: ireg) (**r shift right arithmetic long *) + | Pfaddd (rd rs1 rs2: ireg) (**r Float addition double *) + | Pfaddw (rd rs1 rs2: ireg) (**r Float addition word *) + | Pfsbfd (rd rs1 rs2: ireg) (**r Float sub double *) + | Pfsbfw (rd rs1 rs2: ireg) (**r Float sub word *) + | Pfmuld (rd rs1 rs2: ireg) (**r Float mul double *) + | Pfmulw (rd rs1 rs2: ireg) (**r Float mul word *) + (** Arith RRI32 *) | Pcompiw (it: itest) (rd rs: ireg) (imm: int) (**r comparison imm word *) @@ -197,8 +210,14 @@ Definition basic_to_instruction (b: basic) := | PArithRR Asmblock.Pcvtl2w rd rs => Pcvtl2w rd rs | PArithRR Asmblock.Psxwd rd rs => Psxwd rd rs | PArithRR Asmblock.Pzxwd rd rs => Pzxwd rd rs + | PArithRR Asmblock.Pfabsd rd rs => Pfabsd rd rs + | PArithRR Asmblock.Pfabsw rd rs => Pfabsw rd rs | PArithRR Asmblock.Pfnegd rd rs => Pfnegd rd rs + | PArithRR Asmblock.Pfnegw rd rs => Pfnegw rd rs + | PArithRR Asmblock.Pfnarrowdw rd rs => Pfnarrowdw rd rs + | PArithRR Asmblock.Pfwidenlwd rd rs => Pfwidenlwd rd rs | PArithRR Asmblock.Pfloatwrnsz rd rs => Pfloatwrnsz rd rs + | PArithRR Asmblock.Pfloatudrnsz rd rs => Pfloatudrnsz rd rs | PArithRR Asmblock.Pfloatdrnsz rd rs => Pfloatdrnsz rd rs | PArithRR Asmblock.Pfixedwrzz rd rs => Pfixedwrzz rd rs | PArithRR Asmblock.Pfixeddrzz rd rs => Pfixeddrzz rd rs @@ -238,6 +257,13 @@ Definition basic_to_instruction (b: basic) := | PArithRRR Asmblock.Psrll rd rs1 rs2 => Psrll rd rs1 rs2 | PArithRRR Asmblock.Psral rd rs1 rs2 => Psral rd rs1 rs2 + | PArithRRR Asmblock.Pfaddd rd rs1 rs2 => Pfaddd rd rs1 rs2 + | PArithRRR Asmblock.Pfaddw rd rs1 rs2 => Pfaddw rd rs1 rs2 + | PArithRRR Asmblock.Pfsbfd rd rs1 rs2 => Pfsbfd rd rs1 rs2 + | PArithRRR Asmblock.Pfsbfw rd rs1 rs2 => Pfsbfw rd rs1 rs2 + | PArithRRR Asmblock.Pfmuld rd rs1 rs2 => Pfmuld rd rs1 rs2 + | PArithRRR Asmblock.Pfmulw rd rs1 rs2 => Pfmulw rd rs1 rs2 + (* RRI32 *) | PArithRRI32 (Asmblock.Pcompiw it) rd rs imm => Pcompiw it rd rs imm | PArithRRI32 Asmblock.Paddiw rd rs imm => Paddiw rd rs imm diff --git a/mppa_k1c/Asmblock.v b/mppa_k1c/Asmblock.v index 3cd300c9..a582e866 100644 --- a/mppa_k1c/Asmblock.v +++ b/mppa_k1c/Asmblock.v @@ -279,14 +279,21 @@ Inductive arith_name_rr : Type := | Pmv (**r register move *) | Pnegw (**r negate word *) | Pnegl (**r negate long *) - | Pfnegd (**r float negate double *) | Pcvtl2w (**r Convert Long to Word *) | Psxwd (**r Sign Extend Word to Double Word *) | Pzxwd (**r Zero Extend Word to Double Word *) - | Pfloatwrnsz (**r Floating Point Conversion from integer (single -> int) *) - | Pfloatdrnsz (**r Floating Point Conversion from integer (float -> long) *) - | Pfixedwrzz (**r Integer conversion from floating point (int -> single) *) - | Pfixeddrzz (**r Integer conversion from floating point (long -> float) *) + + | Pfabsd (**r float absolute double *) + | Pfabsw (**r float absolute word *) + | Pfnegd (**r float negate double *) + | Pfnegw (**r float negate word *) + | Pfnarrowdw (**r float narrow 64 -> 32 bits *) + | Pfwidenlwd (**r Floating Point widen from 32 bits to 64 bits *) + | Pfloatwrnsz (**r Floating Point Conversion from integer (int -> single) *) + | Pfloatudrnsz (**r Floating Point Conversion from unsigned integer (ulong -> float) *) + | Pfloatdrnsz (**r Floating Point Conversion from integer (long -> float) *) + | Pfixedwrzz (**r Integer conversion from floating point (single -> int) *) + | Pfixeddrzz (**r Integer conversion from floating point (float -> long) *) . Inductive arith_name_ri32 : Type := @@ -328,6 +335,13 @@ Inductive arith_name_rrr : Type := | Pslll (**r shift left logical long *) | Psrll (**r shift right logical long *) | Psral (**r shift right arithmetic long *) + + | Pfaddd (**r float add double *) + | Pfaddw (**r float add word *) + | Pfsbfd (**r float sub double *) + | Pfsbfw (**r float sub word *) + | Pfmuld (**r float multiply double *) + | Pfmulw (**r float multiply word *) . Inductive arith_name_rri32 : Type := @@ -884,11 +898,17 @@ Definition exec_arith_instr (ai: ar_instruction) (rs: regset) (m: mem) : regset | Pmv => rs#d <- (rs#s) | Pnegw => rs#d <- (Val.neg rs#s) | Pnegl => rs#d <- (Val.negl rs#s) - | Pfnegd => rs#d <- (Val.negf rs#s) | Pcvtl2w => rs#d <- (Val.loword rs#s) | Psxwd => rs#d <- (Val.longofint rs#s) | Pzxwd => rs#d <- (Val.longofintu rs#s) + | Pfnegd => rs#d <- (Val.negf rs#s) + | Pfnegw => rs#d <- (Val.negfs rs#s) + | Pfabsd => rs#d <- (Val.absf rs#s) + | Pfabsw => rs#d <- (Val.absfs rs#s) + | Pfnarrowdw => rs#d <- (Val.singleoffloat rs#s) + | Pfwidenlwd => rs#d <- (Val.floatofsingle rs#s) | Pfloatwrnsz => rs#d <- (match Val.singleofint rs#s with Some f => f | _ => Vundef end) + | Pfloatudrnsz => rs#d <- (match Val.floatoflongu rs#s with Some f => f | _ => Vundef end) | Pfloatdrnsz => rs#d <- (match Val.floatoflong rs#s with Some f => f | _ => Vundef end) | Pfixedwrzz => rs#d <- (match Val.intofsingle rs#s with Some i => i | _ => Vundef end) | Pfixeddrzz => rs#d <- (match Val.longoffloat rs#s with Some i => i | _ => Vundef end) @@ -937,6 +957,13 @@ Definition exec_arith_instr (ai: ar_instruction) (rs: regset) (m: mem) : regset | Pslll => rs#d <- (Val.shll rs#s1 rs#s2) | Psrll => rs#d <- (Val.shrlu rs#s1 rs#s2) | Psral => rs#d <- (Val.shrl rs#s1 rs#s2) + + | Pfaddd => rs#d <- (Val.addf rs#s1 rs#s2) + | Pfaddw => rs#d <- (Val.addfs rs#s1 rs#s2) + | Pfsbfd => rs#d <- (Val.subf rs#s1 rs#s2) + | Pfsbfw => rs#d <- (Val.subfs rs#s1 rs#s2) + | Pfmuld => rs#d <- (Val.mulf rs#s1 rs#s2) + | Pfmulw => rs#d <- (Val.mulfs rs#s1 rs#s2) end | PArithRRI32 n d s i => diff --git a/mppa_k1c/Asmblockgen.v b/mppa_k1c/Asmblockgen.v index e7fa8f6c..6503e5b3 100644 --- a/mppa_k1c/Asmblockgen.v +++ b/mppa_k1c/Asmblockgen.v @@ -544,21 +544,62 @@ Definition transl_op Psrlil RTMP RTMP (Int.sub Int64.iwordsize' n) ::i Paddl RTMP rs RTMP ::i Psrail rd RTMP n ::i k) + + | Oabsf, a1 :: nil => + do rd <- freg_of res; do rs <- freg_of a1; + OK (Pfabsd rd rs ::i k) + | Oabsfs, a1 :: nil => + do rd <- freg_of res; do rs <- freg_of a1; + OK (Pfabsw rd rs ::i k) + | Oaddf, a1 :: a2 :: nil => + do rd <- freg_of res; do rs1 <- freg_of a1; do rs2 <- freg_of a2; + OK (Pfaddd rd rs1 rs2 ::i k) + | Oaddfs, a1 :: a2 :: nil => + do rd <- freg_of res; do rs1 <- freg_of a1; do rs2 <- freg_of a2; + OK (Pfaddw rd rs1 rs2 ::i k) + | Osubf, a1 :: a2 :: nil => + do rd <- freg_of res; do rs1 <- freg_of a1; do rs2 <- freg_of a2; + OK (Pfsbfd rd rs1 rs2 ::i k) + | Osubfs, a1 :: a2 :: nil => + do rd <- freg_of res; do rs1 <- freg_of a1; do rs2 <- freg_of a2; + OK (Pfsbfw rd rs1 rs2 ::i k) + | Omulf, a1 :: a2 :: nil => + do rd <- freg_of res; do rs1 <- freg_of a1; do rs2 <- freg_of a2; + OK (Pfmuld rd rs1 rs2 ::i k) + | Omulfs, a1 :: a2 :: nil => + do rd <- freg_of res; do rs1 <- freg_of a1; do rs2 <- freg_of a2; + OK (Pfmulw rd rs1 rs2 ::i k) | Onegf, a1 :: nil => do rd <- freg_of res; do rs <- freg_of a1; OK (Pfnegd rd rs ::i k) + | Onegfs, a1 :: nil => + do rd <- freg_of res; do rs <- freg_of a1; + OK (Pfnegw rd rs ::i k) + | Osingleofint, a1 :: nil => do rd <- freg_of res; do rs <- ireg_of a1; OK (Pfloatwrnsz rd rs ::i k) | Ofloatoflong, a1 :: nil => do rd <- freg_of res; do rs <- ireg_of a1; OK (Pfloatdrnsz rd rs ::i k) + | Ofloatoflongu, a1 :: nil => + do rd <- freg_of res; do rs <- ireg_of a1; + OK (Pfloatudrnsz rd rs ::i k) | Ointofsingle, a1 :: nil => do rd <- ireg_of res; do rs <- freg_of a1; OK (Pfixedwrzz rd rs ::i k) | Olongoffloat, a1 :: nil => do rd <- ireg_of res; do rs <- freg_of a1; OK (Pfixeddrzz rd rs ::i k) + + | Ofloatofsingle, a1 :: nil => + do rd <- freg_of res; do rs <- freg_of a1; + OK (Pfwidenlwd rd rs ::i k) + | Osingleoffloat, a1 :: nil => + do rd <- freg_of res; do rs <- freg_of a1; + OK (Pfnarrowdw rd rs ::i k) + + | Oabsf , _ => Error (msg "Asmblockgen.transl_op: Oabsf") | Oaddf , _ => Error (msg "Asmblockgen.transl_op: Oaddf") | Osubf , _ => Error (msg "Asmblockgen.transl_op: Osubf") @@ -570,7 +611,6 @@ Definition transl_op | Osubfs , _ => Error (msg "Asmblockgen.transl_op: Osubfs") | Omulfs , _ => Error (msg "Asmblockgen.transl_op: Omulfs") | Odivfs , _ => Error (msg "Asmblockgen.transl_op: Odivfs") - | Ofloatoflong , _ => Error (msg "Asmblockgen.transl_op: Ofloatoflong") | Ofloatoflongu , _ => Error (msg "Asmblockgen.transl_op: Ofloatoflongu") | Osingleoflong , _ => Error (msg "Asmblockgen.transl_op: Osingleoflong") | Osingleoflongu , _ => Error (msg "Asmblockgen.transl_op: Osingleoflongu") @@ -580,114 +620,18 @@ Definition transl_op | Ointuoffloat , _ => Error (msg "Asmblockgen.transl_op: Ointuoffloat") | Ofloatofint , _ => Error (msg "Asmblockgen.transl_op: Ofloatofint") | Ofloatofintu , _ => Error (msg "Asmblockgen.transl_op: Ofloatofintu") - | Ointofsingle , _ => Error (msg "Asmblockgen.transl_op: Ointofsingle") | Ointuofsingle , _ => Error (msg "Asmblockgen.transl_op: Ointuofsingle") - | Osingleofint , _ => Error (msg "Asmblockgen.transl_op: Osingleofint") | Osingleofintu , _ => Error (msg "Asmblockgen.transl_op: Osingleofintu") - | Olongoffloat , _ => Error (msg "Asmblockgen.transl_op: Olongoffloat") | Olonguoffloat , _ => Error (msg "Asmblockgen.transl_op: Olonguoffloat") | Olongofsingle , _ => Error (msg "Asmblockgen.transl_op: Olongofsingle") | Olonguofsingle , _ => Error (msg "Asmblockgen.transl_op: Olonguofsingle") - -(*| Oabsf, a1 :: nil => - do rd <- freg_of res; do rs <- freg_of a1; - OK (Pfabsd rd rs :: k) - | Oaddf, a1 :: a2 :: nil => - do rd <- freg_of res; do rs1 <- freg_of a1; do rs2 <- freg_of a2; - OK (Pfaddd rd rs1 rs2 :: k) - | Osubf, a1 :: a2 :: nil => - do rd <- freg_of res; do rs1 <- freg_of a1; do rs2 <- freg_of a2; - OK (Pfsubd rd rs1 rs2 :: k) - | Omulf, a1 :: a2 :: nil => - do rd <- freg_of res; do rs1 <- freg_of a1; do rs2 <- freg_of a2; - OK (Pfmuld rd rs1 rs2 :: k) - | Odivf, a1 :: a2 :: nil => - do rd <- freg_of res; do rs1 <- freg_of a1; do rs2 <- freg_of a2; - OK (Pfdivd rd rs1 rs2 :: k) - - | Onegfs, a1 :: nil => - do rd <- freg_of res; do rs <- freg_of a1; - OK (Pfnegs rd rs :: k) - | Oabsfs, a1 :: nil => - do rd <- freg_of res; do rs <- freg_of a1; - OK (Pfabss rd rs :: k) - | Oaddfs, a1 :: a2 :: nil => - do rd <- freg_of res; do rs1 <- freg_of a1; do rs2 <- freg_of a2; - OK (Pfadds rd rs1 rs2 :: k) - | Osubfs, a1 :: a2 :: nil => - do rd <- freg_of res; do rs1 <- freg_of a1; do rs2 <- freg_of a2; - OK (Pfsubs rd rs1 rs2 :: k) - | Omulfs, a1 :: a2 :: nil => - do rd <- freg_of res; do rs1 <- freg_of a1; do rs2 <- freg_of a2; - OK (Pfmuls rd rs1 rs2 :: k) - | Odivfs, a1 :: a2 :: nil => - do rd <- freg_of res; do rs1 <- freg_of a1; do rs2 <- freg_of a2; - OK (Pfdivs rd rs1 rs2 :: k) - - | Osingleoffloat, a1 :: nil => - do rd <- freg_of res; do rs <- freg_of a1; - OK (Pfcvtsd rd rs :: k) - | Ofloatofsingle, a1 :: nil => - do rd <- freg_of res; do rs <- freg_of a1; - OK (Pfcvtds rd rs :: k) - - | Ointoffloat, a1 :: nil => - do rd <- ireg_of res; do rs <- freg_of a1; - OK (Pfcvtwd rd rs :: k) - | Ointuoffloat, a1 :: nil => - do rd <- ireg_of res; do rs <- freg_of a1; - OK (Pfcvtwud rd rs :: k) - | Ofloatofint, a1 :: nil => - do rd <- freg_of res; do rs <- ireg_of a1; - OK (Pfcvtdw rd rs :: k) - | Ofloatofintu, a1 :: nil => - do rd <- freg_of res; do rs <- ireg_of a1; - OK (Pfcvtdwu rd rs :: k) - | Ointofsingle, a1 :: nil => - do rd <- ireg_of res; do rs <- freg_of a1; - OK (Pfcvtws rd rs :: k) - | Ointuofsingle, a1 :: nil => - do rd <- ireg_of res; do rs <- freg_of a1; - OK (Pfcvtwus rd rs :: k) - | Osingleofint, a1 :: nil => - do rd <- freg_of res; do rs <- ireg_of a1; - OK (Pfcvtsw rd rs :: k) - | Osingleofintu, a1 :: nil => - do rd <- freg_of res; do rs <- ireg_of a1; - OK (Pfcvtswu rd rs :: k) - - | Olongoffloat, a1 :: nil => - do rd <- ireg_of res; do rs <- freg_of a1; - OK (Pfcvtld rd rs :: k) - | Olonguoffloat, a1 :: nil => - do rd <- ireg_of res; do rs <- freg_of a1; - OK (Pfcvtlud rd rs :: k) - | Ofloatoflong, a1 :: nil => - do rd <- freg_of res; do rs <- ireg_of a1; - OK (Pfcvtdl rd rs :: k) - | Ofloatoflongu, a1 :: nil => - do rd <- freg_of res; do rs <- ireg_of a1; - OK (Pfcvtdlu rd rs :: k) - | Olongofsingle, a1 :: nil => - do rd <- ireg_of res; do rs <- freg_of a1; - OK (Pfcvtls rd rs :: k) - | Olonguofsingle, a1 :: nil => - do rd <- ireg_of res; do rs <- freg_of a1; - OK (Pfcvtlus rd rs :: k) - | Osingleoflong, a1 :: nil => - do rd <- freg_of res; do rs <- ireg_of a1; - OK (Pfcvtsl rd rs :: k) - | Osingleoflongu, a1 :: nil => - do rd <- freg_of res; do rs <- ireg_of a1; - OK (Pfcvtslu rd rs :: k) - -*)| Ocmp cmp, _ => + | Ocmp cmp, _ => do rd <- ireg_of res; transl_cond_op cmp rd args k - + | _, _ => Error(msg "Asmgenblock.transl_op") end. diff --git a/mppa_k1c/PostpassSchedulingOracle.ml b/mppa_k1c/PostpassSchedulingOracle.ml index f5742cc2..54a27966 100644 --- a/mppa_k1c/PostpassSchedulingOracle.ml +++ b/mppa_k1c/PostpassSchedulingOracle.ml @@ -31,10 +31,16 @@ let arith_rr_str = function | Pmv -> "Pmv" | Pnegw -> "Pnegw" | Pnegl -> "Pnegl" - | Pfnegd -> "Pfnegd" | Psxwd -> "Psxwd" | Pzxwd -> "Pzxwd" + | Pfabsw -> "Pfabsw" + | Pfabsd -> "Pfabsd" + | Pfnegw -> "Pfnegw" + | Pfnegd -> "Pfnegd" + | Pfnarrowdw -> "Pfnarrowdw" + | Pfwidenlwd -> "Pfwidenlwd" | Pfloatwrnsz -> "Pfloatwrnsz" + | Pfloatudrnsz -> "Pfloatudrnsz" | Pfloatdrnsz -> "Pfloatdrnsz" | Pfixedwrzz -> "Pfixedwrzz" | Pfixeddrzz -> "Pfixeddrzz" @@ -60,6 +66,12 @@ let arith_rrr_str = function | Pslll -> "Pslll" | Psrll -> "Psrll" | Psral -> "Psral" + | Pfaddd -> "Pfaddd" + | Pfaddw -> "Pfaddw" + | Pfsbfd -> "Pfsbfd" + | Pfsbfw -> "Pfsbfw" + | Pfmuld -> "Pfmuld" + | Pfmulw -> "Pfmulw" let arith_rri32_str = function | Pcompiw it -> "Pcompiw" @@ -286,6 +298,10 @@ let alu_lite : int array = let resmap = fun r -> match r with | "ISSUE" -> 1 | "TINY" -> 1 | "LITE" -> 1 | _ -> 0 in Array.of_list (List.map resmap resource_names) +let alu_full : int array = let resmap = fun r -> match r with + | "ISSUE" -> 1 | "TINY" -> 1 | "LITE" -> 1 | "ALU" -> 1 | _ -> 0 + in Array.of_list (List.map resmap resource_names) + let alu_nop : int array = let resmap = fun r -> match r with | "ISSUE" -> 1 | "NOP" -> 1 | _ -> 0 in Array.of_list (List.map resmap resource_names) @@ -347,7 +363,9 @@ type real_instruction = (* BCU *) | Icall | Call | Cb | Igoto | Goto | Ret | Get | Set (* FPU *) - | Fnegd | Floatwz | Floatdz | Fixedwz | Fixeddz + | Fabsd | Fabsw | Fnegw | Fnegd + | Faddd | Faddw | Fsbfd | Fsbfw | Fmuld | Fmulw + | Fnarrowdw | Fwidenlwd | Floatwz | Floatdz | Floatudz | Fixedwz | Fixeddz let ab_inst_to_real = function | "Paddw" | "Paddiw" | "Pcvtl2w" -> Addw @@ -374,8 +392,11 @@ let ab_inst_to_real = function | "Pnop" | "Pcvtw2l" -> Nop | "Psxwd" -> Sxwd | "Pzxwd" -> Zxwd + | "Pfnarrowdw" -> Fnarrowdw + | "Pfwidenlwd" -> Fwidenlwd | "Pfloatwrnsz" -> Floatwz | "Pfloatdrnsz" -> Floatdz + | "Pfloatudrnsz" -> Floatudz | "Pfixedwrzz" -> Fixedwz | "Pfixeddrzz" -> Fixeddz @@ -400,7 +421,16 @@ let ab_inst_to_real = function | "Pret" -> Ret | "Pset" -> Set + | "Pfabsd" -> Fabsd + | "Pfabsw" -> Fabsw + | "Pfnegw" -> Fnegw | "Pfnegd" -> Fnegd + | "Pfaddd" -> Faddd + | "Pfaddw" -> Faddw + | "Pfsbfd" -> Fsbfd + | "Pfsbfw" -> Fsbfw + | "Pfmuld" -> Fmuld + | "Pfmulw" -> Fmulw | s -> failwith @@ sprintf "ab_inst_to_real: unrecognized instruction: %s" s exception InvalidEncoding @@ -439,7 +469,7 @@ let rec_to_usage r = | Nop -> alu_nop | Sraw | Srlw | Sllw | Srad | Srld | Slld -> (match encoding with None | Some U6 -> alu_tiny | _ -> raise InvalidEncoding) | Sxwd | Zxwd -> (match encoding with None -> alu_lite | _ -> raise InvalidEncoding) - | Fixedwz | Floatwz | Fixeddz | Floatdz -> mau + | Fixedwz | Floatwz | Fixeddz | Floatdz | Floatudz -> mau | Lbs | Lbz | Lhs | Lhz | Lws | Ld -> (match encoding with None | Some U6 | Some S10 -> lsu_data | Some U27L5 | Some U27L10 -> lsu_data_x @@ -450,7 +480,9 @@ let rec_to_usage r = | Some E27U27L10 -> lsu_acc_y) | Icall | Call | Cb | Igoto | Goto | Ret | Set -> bcu | Get -> bcu_tiny_tiny_mau_xnop - | Fnegd -> alu_lite + | Fnegd | Fnegw | Fabsd | Fabsw | Fwidenlwd -> alu_lite + | Fnarrowdw -> alu_full + | Faddd | Faddw | Fsbfd | Fsbfw | Fmuld | Fmulw -> mau let real_inst_to_latency = function | Nop -> 0 (* Only goes through ID *) @@ -458,7 +490,7 @@ let real_inst_to_latency = function | Addd | Andd | Compd | Ord | Sbfd | Srad | Srld | Slld | Xord | Make | Sxwd | Zxwd -> 1 - | Floatwz | Fixedwz | Floatdz | Fixeddz -> 4 + | Floatwz | Fixedwz | Floatdz | Floatudz | Fixeddz -> 4 | Mulw | Muld -> 2 (* FIXME - WORST CASE. If it's S10 then it's only 1 *) | Lbs | Lbz | Lhs | Lhz | Lws | Ld | Sb | Sh | Sw | Sd @@ -466,7 +498,8 @@ let real_inst_to_latency = function | Get -> 1 | Set -> 3 | Icall | Call | Cb | Igoto | Goto | Ret -> 42 (* Should not matter since it's the final instruction of the basic block *) - | Fnegd -> 1 + | Fnegd | Fnegw | Fabsd | Fabsw | Fwidenlwd | Fnarrowdw -> 1 + | Faddd | Faddw | Fsbfd | Fsbfw | Fmuld | Fmulw -> 4 let rec_to_info r : inst_info = let usage = rec_to_usage r diff --git a/mppa_k1c/TargetPrinter.ml b/mppa_k1c/TargetPrinter.ml index 703863b7..da3cf75f 100644 --- a/mppa_k1c/TargetPrinter.ml +++ b/mppa_k1c/TargetPrinter.ml @@ -288,14 +288,26 @@ module Target (*: TARGET*) = fprintf oc " negd %a = %a\n" ireg rd ireg rs | Pnegw(rd, rs) -> fprintf oc " negw %a = %a\n" ireg rd ireg rs - | Pfnegd(rd, rs) -> - fprintf oc " fnegd %a = %a\n" ireg rs ireg rd | Psxwd(rd, rs) -> fprintf oc " sxwd %a = %a\n" ireg rd ireg rs | Pzxwd(rd, rs) -> fprintf oc " zxwd %a = %a\n" ireg rd ireg rs + | Pfabsd(rd, rs) -> + fprintf oc " fabsd %a = %a\n" ireg rd ireg rs + | Pfabsw(rd, rs) -> + fprintf oc " fabsw %a = %a\n" ireg rd ireg rs + | Pfnegd(rd, rs) -> + fprintf oc " fnegd %a = %a\n" ireg rs ireg rd + | Pfnegw(rd, rs) -> + fprintf oc " fnegw %a = %a\n" ireg rs ireg rd + | Pfnarrowdw(rd, rs) -> + fprintf oc " fnarrowdw %a = %a\n" ireg rs ireg rd + | Pfwidenlwd(rd, rs) -> + fprintf oc " fwidenlwd %a = %a\n" ireg rs ireg rd | Pfloatwrnsz(rd, rs) -> fprintf oc " floatw.rn.s %a = %a, 0\n" ireg rd ireg rs + | Pfloatudrnsz(rd, rs) -> + fprintf oc " floatud.rn.s %a = %a, 0\n" ireg rd ireg rs | Pfloatdrnsz(rd, rs) -> fprintf oc " floatd.rn.s %a = %a, 0\n" ireg rd ireg rs | Pfixedwrzz(rd, rs) -> @@ -367,6 +379,19 @@ module Target (*: TARGET*) = | Psral (rd, rs1, rs2) -> fprintf oc " srad %a = %a, %a\n" ireg rd ireg rs1 ireg rs2 + | Pfaddd (rd, rs1, rs2) -> + fprintf oc " faddd %a = %a, %a\n" ireg rd ireg rs1 ireg rs2 + | Pfaddw (rd, rs1, rs2) -> + fprintf oc " faddw %a = %a, %a\n" ireg rd ireg rs1 ireg rs2 + | Pfsbfd (rd, rs1, rs2) -> + fprintf oc " fsbfd %a = %a, %a\n" ireg rd ireg rs1 ireg rs2 + | Pfsbfw (rd, rs1, rs2) -> + fprintf oc " fsbfw %a = %a, %a\n" ireg rd ireg rs1 ireg rs2 + | Pfmuld (rd, rs1, rs2) -> + fprintf oc " fmuld %a = %a, %a\n" ireg rd ireg rs1 ireg rs2 + | Pfmulw (rd, rs1, rs2) -> + fprintf oc " fmulw %a = %a, %a\n" ireg rd ireg rs1 ireg rs2 + (* Arith RRI32 instructions *) | Pcompiw (it, rd, rs, imm) -> fprintf oc " compw.%a %a = %a, %a\n" icond it ireg rd ireg rs coqint64 imm diff --git a/test/mppa/instr/Makefile b/test/mppa/instr/Makefile index 66e40365..b4abb6a4 100644 --- a/test/mppa/instr/Makefile +++ b/test/mppa/instr/Makefile @@ -2,7 +2,7 @@ K1CC ?= k1-mbr-gcc CC ?= gcc CCOMP ?= ccomp OPTIM ?= -O2 -CFLAGS ?= $(OPTIM) -Wl,--wrap=printf +CFLAGS ?= $(OPTIM) SIMU ?= k1-mppa TIMEOUT ?= --signal=SIGTERM 120s diff --git a/test/mppa/instr/addw.c b/test/mppa/instr/addw.c index be8afc67..e22024cf 100644 --- a/test/mppa/instr/addw.c +++ b/test/mppa/instr/addw.c @@ -2,4 +2,4 @@ BEGIN_TEST(int) c = a+b; -END_TEST() +END_TEST32() diff --git a/test/mppa/instr/andd.c b/test/mppa/instr/andd.c index 5a2c7863..e3221bd7 100644 --- a/test/mppa/instr/andd.c +++ b/test/mppa/instr/andd.c @@ -2,4 +2,4 @@ BEGIN_TEST(long long) c = a&b; -END_TEST() +END_TEST64() diff --git a/test/mppa/instr/andw.c b/test/mppa/instr/andw.c index 99de0049..799dc7fb 100644 --- a/test/mppa/instr/andw.c +++ b/test/mppa/instr/andw.c @@ -2,4 +2,4 @@ BEGIN_TEST(int) c = a&b; -END_TEST() +END_TEST32() diff --git a/test/mppa/instr/branch.c b/test/mppa/instr/branch.c index 72e7e20e..c9937e31 100644 --- a/test/mppa/instr/branch.c +++ b/test/mppa/instr/branch.c @@ -7,4 +7,4 @@ BEGIN_TEST(int) else c = 1; } -END_TEST() +END_TEST32() diff --git a/test/mppa/instr/branchz.c b/test/mppa/instr/branchz.c index fb86d357..d3e021b5 100644 --- a/test/mppa/instr/branchz.c +++ b/test/mppa/instr/branchz.c @@ -7,4 +7,4 @@ BEGIN_TEST(int) else c = 1; } -END_TEST() +END_TEST32() diff --git a/test/mppa/instr/branchzu.c b/test/mppa/instr/branchzu.c index 97adb605..d0169174 100644 --- a/test/mppa/instr/branchzu.c +++ b/test/mppa/instr/branchzu.c @@ -8,4 +8,4 @@ BEGIN_TEST(int) else c = 1; } -END_TEST() +END_TEST32() diff --git a/test/mppa/instr/call.c b/test/mppa/instr/call.c index 727cef63..ba2ec323 100644 --- a/test/mppa/instr/call.c +++ b/test/mppa/instr/call.c @@ -12,5 +12,5 @@ BEGIN_TEST(int) { c = sum(make(a), make(b)); } -END_TEST() +END_TEST32() /* RETURN VALUE: 60 */ diff --git a/test/mppa/instr/cast_S64_U32.c b/test/mppa/instr/cast_S64_U32.c index da49b2a8..2d9dc723 100644 --- a/test/mppa/instr/cast_S64_U32.c +++ b/test/mppa/instr/cast_S64_U32.c @@ -4,4 +4,4 @@ BEGIN_TEST(long long) { c = (unsigned int) a; } -END_TEST() +END_TEST64() diff --git a/test/mppa/instr/cast_U32_S64.c b/test/mppa/instr/cast_U32_S64.c index b6bcdf6a..6f9cd059 100644 --- a/test/mppa/instr/cast_U32_S64.c +++ b/test/mppa/instr/cast_U32_S64.c @@ -4,4 +4,4 @@ BEGIN_TEST(unsigned int) { c = (long long) a; } -END_TEST() +END_TEST32() diff --git a/test/mppa/instr/cb.deqz.c b/test/mppa/instr/cb.deqz.c index c56733f0..6da2ab07 100644 --- a/test/mppa/instr/cb.deqz.c +++ b/test/mppa/instr/cb.deqz.c @@ -7,4 +7,4 @@ BEGIN_TEST(long long) else c = 0; } -END_TEST() +END_TEST64() diff --git a/test/mppa/instr/cb.dgez.c b/test/mppa/instr/cb.dgez.c index abb6ec57..7bef25ad 100644 --- a/test/mppa/instr/cb.dgez.c +++ b/test/mppa/instr/cb.dgez.c @@ -7,4 +7,4 @@ BEGIN_TEST(long long) else c = 0; } -END_TEST() +END_TEST64() diff --git a/test/mppa/instr/cb.dgtz.c b/test/mppa/instr/cb.dgtz.c index d4271845..1a43fb1f 100644 --- a/test/mppa/instr/cb.dgtz.c +++ b/test/mppa/instr/cb.dgtz.c @@ -7,4 +7,4 @@ BEGIN_TEST(long long) else c = 0; } -END_TEST() +END_TEST64() diff --git a/test/mppa/instr/cb.dlez.c b/test/mppa/instr/cb.dlez.c index 18e67f06..2fb97939 100644 --- a/test/mppa/instr/cb.dlez.c +++ b/test/mppa/instr/cb.dlez.c @@ -7,4 +7,4 @@ BEGIN_TEST(long long) else c = 0; } -END_TEST() +END_TEST64() diff --git a/test/mppa/instr/cb.dltz.c b/test/mppa/instr/cb.dltz.c index 366aea49..a431d5d0 100644 --- a/test/mppa/instr/cb.dltz.c +++ b/test/mppa/instr/cb.dltz.c @@ -7,4 +7,4 @@ BEGIN_TEST(long long) else c = 0; } -END_TEST() +END_TEST64() diff --git a/test/mppa/instr/cb.dnez.c b/test/mppa/instr/cb.dnez.c index 81c2cd29..44516cbe 100644 --- a/test/mppa/instr/cb.dnez.c +++ b/test/mppa/instr/cb.dnez.c @@ -7,4 +7,4 @@ BEGIN_TEST(long long) else c = 0; } -END_TEST() +END_TEST64() diff --git a/test/mppa/instr/cb.wgez.c b/test/mppa/instr/cb.wgez.c index 477f4bc6..5779ad92 100644 --- a/test/mppa/instr/cb.wgez.c +++ b/test/mppa/instr/cb.wgez.c @@ -7,4 +7,4 @@ BEGIN_TEST(int) else c = 0; } -END_TEST() +END_TEST32() diff --git a/test/mppa/instr/cb.wgtz.c b/test/mppa/instr/cb.wgtz.c index c9ab9a06..abb695bd 100644 --- a/test/mppa/instr/cb.wgtz.c +++ b/test/mppa/instr/cb.wgtz.c @@ -7,4 +7,4 @@ BEGIN_TEST(int) else c = 0; } -END_TEST() +END_TEST32() diff --git a/test/mppa/instr/cb.wlez.c b/test/mppa/instr/cb.wlez.c index c3069fda..3a2e08c1 100644 --- a/test/mppa/instr/cb.wlez.c +++ b/test/mppa/instr/cb.wlez.c @@ -7,4 +7,4 @@ BEGIN_TEST(int) else c = 0; } -END_TEST() +END_TEST32() diff --git a/test/mppa/instr/cb.wltz.c b/test/mppa/instr/cb.wltz.c index 6cf5fcf0..5d52c72a 100644 --- a/test/mppa/instr/cb.wltz.c +++ b/test/mppa/instr/cb.wltz.c @@ -7,4 +7,4 @@ BEGIN_TEST(int) else c = 0; } -END_TEST() +END_TEST32() diff --git a/test/mppa/instr/compd.eq.c b/test/mppa/instr/compd.eq.c index d19a4d20..4fe8de2a 100644 --- a/test/mppa/instr/compd.eq.c +++ b/test/mppa/instr/compd.eq.c @@ -4,4 +4,4 @@ BEGIN_TEST(long long) { c = ((a & 0x1LL) == (b & 0x1LL)); } -END_TEST() +END_TEST64() diff --git a/test/mppa/instr/compd.geu.c b/test/mppa/instr/compd.geu.c index edc31183..fccf0804 100644 --- a/test/mppa/instr/compd.geu.c +++ b/test/mppa/instr/compd.geu.c @@ -4,4 +4,4 @@ BEGIN_TEST(unsigned long long) { c = (a >= b); } -END_TEST() +END_TEST64() diff --git a/test/mppa/instr/compd.gt.c b/test/mppa/instr/compd.gt.c index 24147779..b9901436 100644 --- a/test/mppa/instr/compd.gt.c +++ b/test/mppa/instr/compd.gt.c @@ -4,4 +4,4 @@ BEGIN_TEST(long long) { c = (a > b); } -END_TEST() +END_TEST64() diff --git a/test/mppa/instr/compd.gtu.c b/test/mppa/instr/compd.gtu.c index 5ce82569..7b2b96a6 100644 --- a/test/mppa/instr/compd.gtu.c +++ b/test/mppa/instr/compd.gtu.c @@ -4,4 +4,4 @@ BEGIN_TEST(unsigned long long) { c = (a > b); } -END_TEST() +END_TEST64() diff --git a/test/mppa/instr/compd.le.c b/test/mppa/instr/compd.le.c index a84aad97..6fa0f103 100644 --- a/test/mppa/instr/compd.le.c +++ b/test/mppa/instr/compd.le.c @@ -4,4 +4,4 @@ BEGIN_TEST(long long) { c = (a <= b); } -END_TEST() +END_TEST64() diff --git a/test/mppa/instr/compd.leu.c b/test/mppa/instr/compd.leu.c index e386bc27..1ad18281 100644 --- a/test/mppa/instr/compd.leu.c +++ b/test/mppa/instr/compd.leu.c @@ -4,4 +4,4 @@ BEGIN_TEST(unsigned long long) { c = (a <= b); } -END_TEST() +END_TEST64() diff --git a/test/mppa/instr/compd.lt.c b/test/mppa/instr/compd.lt.c index df07a708..c42cda56 100644 --- a/test/mppa/instr/compd.lt.c +++ b/test/mppa/instr/compd.lt.c @@ -4,4 +4,4 @@ BEGIN_TEST(long long) { c = (a < b); } -END_TEST() +END_TEST64() diff --git a/test/mppa/instr/compd.ltu.c b/test/mppa/instr/compd.ltu.c index dfaa8921..b03d4d53 100644 --- a/test/mppa/instr/compd.ltu.c +++ b/test/mppa/instr/compd.ltu.c @@ -4,4 +4,4 @@ BEGIN_TEST(unsigned long long) { c = (a < b); } -END_TEST() +END_TEST64() diff --git a/test/mppa/instr/compd.ne.c b/test/mppa/instr/compd.ne.c index 19ce0a69..fd9d0b28 100644 --- a/test/mppa/instr/compd.ne.c +++ b/test/mppa/instr/compd.ne.c @@ -4,4 +4,4 @@ BEGIN_TEST(unsigned long long) { c = ((a & 0x1ULL) != (b & 0x1ULL)); } -END_TEST() +END_TEST64() diff --git a/test/mppa/instr/compw.eq.c b/test/mppa/instr/compw.eq.c index dc7a3ab1..cd93f365 100644 --- a/test/mppa/instr/compw.eq.c +++ b/test/mppa/instr/compw.eq.c @@ -4,4 +4,4 @@ BEGIN_TEST(int) { c = ((a & 0x1) == (b & 0x1)); } -END_TEST() +END_TEST32() diff --git a/test/mppa/instr/compw.geu.c b/test/mppa/instr/compw.geu.c index d72ca56c..b8fb1adf 100644 --- a/test/mppa/instr/compw.geu.c +++ b/test/mppa/instr/compw.geu.c @@ -4,4 +4,4 @@ BEGIN_TEST(unsigned int) { c = (a >= b); } -END_TEST() +END_TEST32() diff --git a/test/mppa/instr/compw.gt.c b/test/mppa/instr/compw.gt.c index 9ad02610..5f6bc907 100644 --- a/test/mppa/instr/compw.gt.c +++ b/test/mppa/instr/compw.gt.c @@ -4,4 +4,4 @@ BEGIN_TEST(int) { c = (a > b); } -END_TEST() +END_TEST32() diff --git a/test/mppa/instr/compw.gtu.c b/test/mppa/instr/compw.gtu.c index 77f04989..947f6a14 100644 --- a/test/mppa/instr/compw.gtu.c +++ b/test/mppa/instr/compw.gtu.c @@ -4,4 +4,4 @@ BEGIN_TEST(unsigned int) { c = (a > b); } -END_TEST() +END_TEST32() diff --git a/test/mppa/instr/compw.le.c b/test/mppa/instr/compw.le.c index b7a7a432..35ec6b7d 100644 --- a/test/mppa/instr/compw.le.c +++ b/test/mppa/instr/compw.le.c @@ -4,4 +4,4 @@ BEGIN_TEST(int) { c = (a <= b); } -END_TEST() +END_TEST32() diff --git a/test/mppa/instr/compw.leu.c b/test/mppa/instr/compw.leu.c index 4892f06c..74ebfb42 100644 --- a/test/mppa/instr/compw.leu.c +++ b/test/mppa/instr/compw.leu.c @@ -4,4 +4,4 @@ BEGIN_TEST(unsigned int) { c = (a <= b); } -END_TEST() +END_TEST32() diff --git a/test/mppa/instr/compw.lt.c b/test/mppa/instr/compw.lt.c index 2cc151bf..cb1f30bd 100644 --- a/test/mppa/instr/compw.lt.c +++ b/test/mppa/instr/compw.lt.c @@ -4,4 +4,4 @@ BEGIN_TEST(int) { c = (a < b); } -END_TEST() +END_TEST32() diff --git a/test/mppa/instr/compw.ltu.c b/test/mppa/instr/compw.ltu.c index b524127f..6a0c5af1 100644 --- a/test/mppa/instr/compw.ltu.c +++ b/test/mppa/instr/compw.ltu.c @@ -4,4 +4,4 @@ BEGIN_TEST(unsigned int) { c = (a < b); } -END_TEST() +END_TEST32() diff --git a/test/mppa/instr/compw.ne.c b/test/mppa/instr/compw.ne.c index 433b0b86..7035e2c7 100644 --- a/test/mppa/instr/compw.ne.c +++ b/test/mppa/instr/compw.ne.c @@ -4,4 +4,4 @@ BEGIN_TEST(unsigned int) { c = ((a & 0x1U) != (b & 0x1U)); } -END_TEST() +END_TEST32() diff --git a/test/mppa/instr/div2.c b/test/mppa/instr/div2.c index 01a4b575..b5dfe63a 100644 --- a/test/mppa/instr/div2.c +++ b/test/mppa/instr/div2.c @@ -4,4 +4,4 @@ BEGIN_TEST(int) { c = (a + b) / 2; } -END_TEST() +END_TEST32() diff --git a/test/mppa/instr/doubleconv.c b/test/mppa/instr/doubleconv.c index e40c65e5..55b1ddab 100644 --- a/test/mppa/instr/doubleconv.c +++ b/test/mppa/instr/doubleconv.c @@ -6,4 +6,4 @@ double long2double(long v){ BEGIN_TEST(long) c = (long) long2double(a) + (long) long2double(b) + (long) long2double(42.3); -END_TEST() +END_TEST64() diff --git a/test/mppa/instr/faddd.c b/test/mppa/instr/faddd.c new file mode 100644 index 00000000..35b7fc92 --- /dev/null +++ b/test/mppa/instr/faddd.c @@ -0,0 +1,5 @@ +#include "framework.h" + +BEGIN_TEST(double) + c = ((double)a + (double)b); +END_TESTF64() diff --git a/test/mppa/instr/faddw.c b/test/mppa/instr/faddw.c new file mode 100644 index 00000000..a00e9afe --- /dev/null +++ b/test/mppa/instr/faddw.c @@ -0,0 +1,5 @@ +#include "framework.h" + +BEGIN_TEST(double) + c = ((float)a + (float)b); +END_TESTF64() diff --git a/test/mppa/instr/floatconv.c b/test/mppa/instr/floatconv.c index 025f968b..32b798e1 100644 --- a/test/mppa/instr/floatconv.c +++ b/test/mppa/instr/floatconv.c @@ -6,4 +6,4 @@ float int2float(int v){ BEGIN_TEST(int) c = (int) int2float(a) + (int) int2float(b) + (int) int2float(42.3); -END_TEST() +END_TEST32() diff --git a/test/mppa/instr/fmuld.c b/test/mppa/instr/fmuld.c new file mode 100644 index 00000000..03c990fa --- /dev/null +++ b/test/mppa/instr/fmuld.c @@ -0,0 +1,7 @@ +#include "framework.h" + +BEGIN_TEST(double) +{ + c = ((double)a * (double)b); +} +END_TESTF64() diff --git a/test/mppa/instr/fmulw.c b/test/mppa/instr/fmulw.c new file mode 100644 index 00000000..030a6d9c --- /dev/null +++ b/test/mppa/instr/fmulw.c @@ -0,0 +1,7 @@ +#include "framework.h" + +BEGIN_TEST(double) +{ + c = ((float)a * (float)b); +} +END_TESTF64() diff --git a/test/mppa/instr/fnegd.c b/test/mppa/instr/fnegd.c new file mode 100644 index 00000000..974eb7e8 --- /dev/null +++ b/test/mppa/instr/fnegd.c @@ -0,0 +1,7 @@ +#include "framework.h" + +BEGIN_TEST(double) +{ + c = (-(double)a); +} +END_TESTF64() diff --git a/test/mppa/instr/fnegw.c b/test/mppa/instr/fnegw.c new file mode 100644 index 00000000..acbabf68 --- /dev/null +++ b/test/mppa/instr/fnegw.c @@ -0,0 +1,7 @@ +#include "framework.h" + +BEGIN_TEST(double) +{ + c = (-(float)a); +} +END_TESTF64() diff --git a/test/mppa/instr/for.c b/test/mppa/instr/for.c index d6870afb..373ab6bd 100644 --- a/test/mppa/instr/for.c +++ b/test/mppa/instr/for.c @@ -6,4 +6,4 @@ BEGIN_TEST(int) for (j = 0 ; j < 10 ; j++) c += a; } -END_TEST() +END_TEST32() diff --git a/test/mppa/instr/forvarl.c b/test/mppa/instr/forvarl.c index 30717a51..c1fe90fd 100644 --- a/test/mppa/instr/forvarl.c +++ b/test/mppa/instr/forvarl.c @@ -7,4 +7,4 @@ BEGIN_TEST(long long int) for (j = 0 ; j < (b & 0x8LL) ; j++) c += a; } -END_TEST() +END_TEST64() diff --git a/test/mppa/instr/framework.h b/test/mppa/instr/framework.h index d1c652bd..d4f36f6b 100644 --- a/test/mppa/instr/framework.h +++ b/test/mppa/instr/framework.h @@ -1,10 +1,9 @@ #ifndef __FRAMEWORK_H__ #define __FRAMEWORK_H__ +#include #include "../prng/prng.c" -int printf(const char *, ...); - #define BEGIN_TEST_N(type, N)\ int main(void){\ type t[N], c, i, j, S;\ @@ -18,7 +17,8 @@ int printf(const char *, ...); #define BEGIN_TEST(type)\ int main(void){\ - type a, b, c, i, S;\ + type a, b, c, S;\ + int i;\ srand(0);\ S = 0;\ for (i = 0 ; i < 100 ; i++){\ @@ -29,22 +29,38 @@ int printf(const char *, ...); /* In between BEGIN_TEST and END_TEST : definition of c */ -#define END_TEST()\ - printf("%llu\n", c);\ +#define END_TEST64()\ + printf("%llu\t%llu\t%llu\n", a, b, c);\ S += c;\ }\ return S;\ } - /* END END_TEST */ + /* END END_TEST64 */ #define END_TEST32()\ - printf("%u\n", c);\ + printf("%u\t%u\t%u\n", a, b, c);\ S += c;\ }\ return S;\ } /* END END_TEST32 */ +#define END_TESTF32()\ + printf("%f\t%f\t%f\n", a, b, c);\ + S += c;\ + }\ + return 0;\ + } + /* END END_TESTF32 */ + +#define END_TESTF64()\ + printf("%lf\t%lf\t%lf\n", a, b, c);\ + S += c;\ + }\ + return 0;\ + } + /* END END_TESTF64 */ + #endif diff --git a/test/mppa/instr/fsbfd.c b/test/mppa/instr/fsbfd.c new file mode 100644 index 00000000..f80c1efe --- /dev/null +++ b/test/mppa/instr/fsbfd.c @@ -0,0 +1,7 @@ +#include "framework.h" + +BEGIN_TEST(double) +{ + c = ((double)a - (double)b); +} +END_TESTF64() diff --git a/test/mppa/instr/fsbfw.c b/test/mppa/instr/fsbfw.c new file mode 100644 index 00000000..835963d5 --- /dev/null +++ b/test/mppa/instr/fsbfw.c @@ -0,0 +1,7 @@ +#include "framework.h" + +BEGIN_TEST(double) +{ + c = ((float)a - (float)b); +} +END_TESTF64() diff --git a/test/mppa/instr/indirect_call.c b/test/mppa/instr/indirect_call.c index 3a45ce52..f376c00a 100644 --- a/test/mppa/instr/indirect_call.c +++ b/test/mppa/instr/indirect_call.c @@ -30,4 +30,4 @@ BEGIN_TEST(long long) c += op(make(a), make(b)); } -END_TEST() +END_TEST64() diff --git a/test/mppa/instr/indirect_tailcall.c b/test/mppa/instr/indirect_tailcall.c index 69295117..e6c16ea1 100644 --- a/test/mppa/instr/indirect_tailcall.c +++ b/test/mppa/instr/indirect_tailcall.c @@ -30,4 +30,4 @@ BEGIN_TEST(long long) { c += random_op(a, b); } -END_TEST() +END_TEST64() diff --git a/test/mppa/instr/lbs.c b/test/mppa/instr/lbs.c index f104d62b..22a50632 100644 --- a/test/mppa/instr/lbs.c +++ b/test/mppa/instr/lbs.c @@ -6,4 +6,4 @@ BEGIN_TEST(int) c = s[(a & (sizeof(s)-1))]; } -END_TEST() +END_TEST32() diff --git a/test/mppa/instr/lbz.c b/test/mppa/instr/lbz.c index 2deeaebe..04ba098d 100644 --- a/test/mppa/instr/lbz.c +++ b/test/mppa/instr/lbz.c @@ -6,4 +6,4 @@ BEGIN_TEST(int) c = s[a & (sizeof(s) - 1)]; } -END_TEST() +END_TEST32() diff --git a/test/mppa/instr/muld.c b/test/mppa/instr/muld.c index 9a40f389..f7e23850 100644 --- a/test/mppa/instr/muld.c +++ b/test/mppa/instr/muld.c @@ -4,4 +4,4 @@ BEGIN_TEST(long long) { c = a*b; } -END_TEST() +END_TEST64() diff --git a/test/mppa/instr/mulw.c b/test/mppa/instr/mulw.c index bf517ce8..a91d966e 100644 --- a/test/mppa/instr/mulw.c +++ b/test/mppa/instr/mulw.c @@ -4,4 +4,4 @@ BEGIN_TEST(int) { c = a * b; } -END_TEST() +END_TEST32() diff --git a/test/mppa/instr/negd.c b/test/mppa/instr/negd.c index a8e8ff45..837b9828 100644 --- a/test/mppa/instr/negd.c +++ b/test/mppa/instr/negd.c @@ -4,4 +4,4 @@ BEGIN_TEST(long long) { c = -a; } -END_TEST() +END_TEST64() diff --git a/test/mppa/instr/ord.c b/test/mppa/instr/ord.c index eaedcb28..cae1ae8b 100644 --- a/test/mppa/instr/ord.c +++ b/test/mppa/instr/ord.c @@ -4,4 +4,4 @@ BEGIN_TEST(long long) { c = a | b; } -END_TEST() +END_TEST64() diff --git a/test/mppa/instr/sbfd.c b/test/mppa/instr/sbfd.c index 912f1fdb..77c28c77 100644 --- a/test/mppa/instr/sbfd.c +++ b/test/mppa/instr/sbfd.c @@ -4,4 +4,4 @@ BEGIN_TEST(long long) { c = a-b; } -END_TEST() +END_TEST64() diff --git a/test/mppa/instr/sbfw.c b/test/mppa/instr/sbfw.c index feffd497..e38a1fff 100644 --- a/test/mppa/instr/sbfw.c +++ b/test/mppa/instr/sbfw.c @@ -4,4 +4,4 @@ BEGIN_TEST(int) { c = a-b; } -END_TEST() +END_TEST32() diff --git a/test/mppa/instr/simple.c b/test/mppa/instr/simple.c index 89bba27e..944f09c9 100644 --- a/test/mppa/instr/simple.c +++ b/test/mppa/instr/simple.c @@ -4,4 +4,4 @@ BEGIN_TEST(int) { c = a+b; } -END_TEST() +END_TEST32() diff --git a/test/mppa/instr/sllw.c b/test/mppa/instr/sllw.c index df55c9e8..6dd41a6c 100644 --- a/test/mppa/instr/sllw.c +++ b/test/mppa/instr/sllw.c @@ -4,4 +4,4 @@ BEGIN_TEST(int) { c = a << (b & 0x8); } -END_TEST() +END_TEST32() diff --git a/test/mppa/instr/srad.c b/test/mppa/instr/srad.c index b4047bc7..00be9d0c 100644 --- a/test/mppa/instr/srad.c +++ b/test/mppa/instr/srad.c @@ -4,4 +4,4 @@ BEGIN_TEST(long long) { c = a >> (b & 0x8LL); } -END_TEST() +END_TEST64() diff --git a/test/mppa/instr/srld.c b/test/mppa/instr/srld.c index 71e82b2a..14970efd 100644 --- a/test/mppa/instr/srld.c +++ b/test/mppa/instr/srld.c @@ -4,4 +4,4 @@ BEGIN_TEST(unsigned long long) { c = a >> (b & 0x8ULL); } -END_TEST() +END_TEST64() diff --git a/test/mppa/instr/tailcall.c b/test/mppa/instr/tailcall.c index 0d15d9e0..6c659a01 100644 --- a/test/mppa/instr/tailcall.c +++ b/test/mppa/instr/tailcall.c @@ -12,5 +12,5 @@ BEGIN_TEST(int) { c = sum(a, b); } -END_TEST() +END_TEST32() /* RETURN VALUE: 60 */ diff --git a/test/mppa/instr/udivd.c b/test/mppa/instr/udivd.c index 52e0d412..cfb31881 100644 --- a/test/mppa/instr/udivd.c +++ b/test/mppa/instr/udivd.c @@ -4,4 +4,4 @@ BEGIN_TEST(unsigned long long) { c = a/b; } -END_TEST() +END_TEST64() diff --git a/test/mppa/instr/umodd.c b/test/mppa/instr/umodd.c index e7dd506f..a7f25f1c 100644 --- a/test/mppa/instr/umodd.c +++ b/test/mppa/instr/umodd.c @@ -4,4 +4,4 @@ BEGIN_TEST(unsigned long long) { c = a%b; } -END_TEST() +END_TEST64() diff --git a/test/mppa/instr/xord.c b/test/mppa/instr/xord.c index b9d86f06..b6a90cb0 100644 --- a/test/mppa/instr/xord.c +++ b/test/mppa/instr/xord.c @@ -4,4 +4,4 @@ BEGIN_TEST(long long) { c = a^b; } -END_TEST() +END_TEST64() -- cgit