]> gitweb.factorcode.org Git - factor.git/commitdiff
Fix complex float support on NetBSD
authorsheeple <sheeple@lisp.internal.stack-effects.com>
Thu, 12 Feb 2009 14:10:21 +0000 (08:10 -0600)
committersheeple <sheeple@lisp.internal.stack-effects.com>
Thu, 12 Feb 2009 14:10:21 +0000 (08:10 -0600)
basis/alien/complex/complex.factor
basis/alien/structs/structs.factor
basis/cpu/x86/32/32.factor

index 60a84b939433520a358ed2838405a88b78883899..079ad57aa56f5afbce61488273cd5acba809be93 100644 (file)
@@ -1,6 +1,13 @@
 ! Copyright (C) 2009 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: alien.complex.functor sequences kernel ;
+USING: alien.c-types alien.complex.functor accessors
+sequences kernel ;
 IN: alien.complex
 
-<< { "float" "double" } [ dup "complex-" prepend define-complex-type ] each >>
\ No newline at end of file
+<<
+{ "float" "double" } [ dup "complex-" prepend define-complex-type ] each
+
+! This overrides the fact that small structures are never returned
+! in registers on NetBSD, Linux and Solaris running on 32-bit x86.
+"complex-float" c-type t >>return-in-registers? drop
+ >>
index 9c28b71cc61e35d3076869439872bab1cb1f91aa..3e26e4fb39a8c3dd50e8d1ef42f0192c8bd9d27a 100755 (executable)
@@ -14,7 +14,9 @@ fields
 { unboxer-quot callable }
 { getter callable }
 { setter callable }
-return-in-registers ;
+return-in-registers? ;
+
+M: struct-type c-type ;
 
 M: struct-type heap-size size>> ;
 
index c409cfb16492384efcd6ad6e1b4284501b326f82..f881792ac60007440f7815f9800f9c69e6e261b0 100755 (executable)
@@ -53,7 +53,7 @@ M: x86.32 return-struct-in-registers? ( c-type -- ? )
     [ return-in-registers?>> ]
     [ heap-size { 1 2 4 8 } member? ] bi
     os { linux netbsd solaris } member? not
-    and and ;
+    and or ;
 
 : struct-return@ ( n -- operand )
     [ next-stack@ ] [ stack-frame get params>> stack@ ] if* ;