aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mppa_k1c/Asmblockgen.v3
-rw-r--r--test/monniaux/nand/nand.c16
2 files changed, 19 insertions, 0 deletions
diff --git a/mppa_k1c/Asmblockgen.v b/mppa_k1c/Asmblockgen.v
index c3ac217b..87df237c 100644
--- a/mppa_k1c/Asmblockgen.v
+++ b/mppa_k1c/Asmblockgen.v
@@ -547,6 +547,9 @@ Definition transl_op
| Odivlu, _ => Error (msg "Asmblockgen.transl_op: Odivlu") (* Géré par fonction externe *)
| Omodl, _ => Error (msg "Asmblockgen.transl_op: Omodl") (* Géré par fonction externe *)
| Omodlu, _ => Error (msg "Asmblockgen.transl_op: Omodlu") (* Géré par fonction externe *)
+ | Onotl, a1 :: nil =>
+ do rd <- ireg_of res; do rs <- ireg_of a1;
+ OK (xorimm64 rd rs Int64.mone ::i k)
| Oandl, a1 :: a2 :: nil =>
do rd <- ireg_of res; do rs1 <- ireg_of a1; do rs2 <- ireg_of a2;
OK (Pandl rd rs1 rs2 ::i k)
diff --git a/test/monniaux/nand/nand.c b/test/monniaux/nand/nand.c
index 9c2d2298..379a1bad 100644
--- a/test/monniaux/nand/nand.c
+++ b/test/monniaux/nand/nand.c
@@ -18,6 +18,22 @@ scalar nxor(scalar x, scalar y) {
return ~(x ^ y);
}
+scalar andn1(scalar x, scalar y) {
+ return ~x & y;
+}
+
+scalar andn2(scalar x, scalar y) {
+ return x & ~y;
+}
+
+scalar orn1(scalar x, scalar y) {
+ return ~x | y;
+}
+
+scalar orn2(scalar x, scalar y) {
+ return x | ~y;
+}
+
int main() {
scalar x = 0xF4, y = 0x33;
printf("%X\n", nxor(x, y));