mescc: Support bitwise or.
authorJan Nieuwenhuizen <janneke@gnu.org>
Fri, 24 Mar 2017 22:15:01 +0000 (23:15 +0100)
committerJan Nieuwenhuizen <janneke@gnu.org>
Fri, 24 Mar 2017 22:15:01 +0000 (23:15 +0100)
* module/mes/as-i386.mes (i386:accu-or-base): New function.
* module/mes/as-i386.scm: Export it.
* module/language/c99/compiler.mes (expr->accu): Use it; support bitwise or.
* scaffold/t.c (math_test): Test it.
* scaffold/mini-mes.c (logior): Use it.

module/mes/as-i386.mes
module/mes/as-i386.scm
scaffold/mini-mes.c
scaffold/t.c

index a2762740682dba39c738c4ccfc771fd492d869f1..9806f0e0c61f4e6691df6f0156f7c5200baee200 100644 (file)
     #x89 #xd1                           ; mov    %edx,%ecx
     #xd3 #xe0))                         ; shl    %cl,%eax
 
+(define (i386:accu-or-base)
+  '(#x09 #xd0))                         ; or    %edx,%eax
+
 (define (i386:accu+accu)
   '(#x01 #xc0))                         ; add    %eax,%eax
 
index fa543c54080876795e08408c5d922312eec6829b..7f094c076bb2dfd8dd785433d927d2df5a87b984 100644 (file)
@@ -46,6 +46,7 @@
             i386:accu*base
             i386:accu-base
             i386:accu-shl
+            i386:accu-or-base
             i386:accu<<base
             i386:base-sub
             i386:base->accu
index 0d8fdb94ff5af7d44ffcf6c9148de81ece2ac22a..8ab0a706326c81a112acf5c2f86a21a20cbc4743 100644 (file)
@@ -1488,9 +1488,7 @@ logior (SCM x) ///((arity . n))
 #if __GNUC__
       n |= VALUE (car (x));
 #else
-      puts ("FIXME: logior\n");
-      //FIXME
-      //n = n | VALUE (car (x));
+      n = n | VALUE (car (x));
 #endif
       x = cdr (x);
     }
index 419e75330d8c24404c784f10d7a3454c26abf76b..0a620d6761ae3ecd1d42097d7c44a4f2f42c3dac 100644 (file)
@@ -219,6 +219,9 @@ math_test ()
   puts ("t: 3 << 4\n");
   if (3 << 4 != 48) return 3 << 4;
 
+  puts ("t: 1 | 4\n");
+  if ((1 | 4) != 5) return 1 | 4;
+
   return read_test ();
 }