]> gitweb.factorcode.org Git - factor.git/commitdiff
compiler.cfg.intrinsics.allot: fix <byte-array> intrinsic for real. Don't ever check...
authorSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Wed, 5 May 2010 17:17:20 +0000 (13:17 -0400)
committerSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Wed, 5 May 2010 17:17:20 +0000 (13:17 -0400)
basis/compiler/cfg/intrinsics/allot/allot.factor

index 47f5be962ee599d2436dcdec540425159a5de0ca..dd3288cec363564461148858a4da0800676b13ba 100644 (file)
@@ -4,7 +4,8 @@ USING: kernel math math.order sequences accessors arrays
 byte-arrays layouts classes.tuple.private fry locals
 compiler.tree.propagation.info compiler.cfg.hats
 compiler.cfg.instructions compiler.cfg.stacks
-compiler.cfg.utilities compiler.cfg.builder.blocks ;
+compiler.cfg.utilities compiler.cfg.builder.blocks
+compiler.constants cpu.architecture alien.c-types ;
 IN: compiler.cfg.intrinsics.allot
 
 : ##set-slots ( regs obj class -- )
@@ -73,10 +74,16 @@ IN: compiler.cfg.intrinsics.allot
     dup node-input-infos first literal>> dup expand-(byte-array)?
     [ nip emit-allot-byte-array drop ] [ drop emit-primitive ] if ;
 
+:: zero-byte-array ( len reg -- )
+    0 ^^load-literal :> elt
+    reg ^^tagged>integer :> reg
+    len 3 + 4 /i iota [
+        [ elt reg ] dip 4 * byte-array-offset + int-rep uint ##store-memory-imm
+    ] each ;
+
 :: emit-<byte-array> ( node -- )
     node node-input-infos first literal>> dup expand-<byte-array>? [
         :> len
-        0 ^^load-literal :> elt
         len emit-allot-byte-array :> reg
-        len cell align cell /i reg elt byte-array store-initial-element
+        len reg zero-byte-array
     ] [ drop node emit-primitive ] if ;