]> gitweb.factorcode.org Git - factor.git/commitdiff
Optimize byte-reverse macro in alien.endian -- it was shifting each byte to the 0th...
authorDoug Coleman <doug.coleman@gmail.com>
Wed, 12 Oct 2011 02:36:22 +0000 (19:36 -0700)
committerDoug Coleman <doug.coleman@gmail.com>
Wed, 12 Oct 2011 02:36:22 +0000 (19:36 -0700)
basis/alien/endian/endian.factor

index bc2919bb6e6b0b58fb65305d62d6fa75998ab704..b905e4b66b06fbcb503edb605286d49036b43f0b 100644 (file)
@@ -18,13 +18,21 @@ ERROR: invalid-signed-conversion n ;
         [ invalid-signed-conversion ]
     } case ; inline
 
+<PRIVATE
+
+: byte-mask ( #bits-shift -- mask )
+    [ HEX: ff ] dip shift ; foldable
+
+PRIVATE>
+
 MACRO: byte-reverse ( n signed? -- quot )
     [
         drop
         [
             dup iota [
                 [ 1 + - -8 * ] [ nip 8 * ] 2bi
-                '[ _ shift HEX: ff bitand _ shift ]
+                [ + ] [ nip byte-mask ] 2bi
+                '[ _ shift _ bitand ]
             ] with map
         ] [ 1 - [ bitor ] n*quot ] bi
     ] [