From a7b5957f6d9308fc07cdaeb55e2852db6f1f71f6 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sun, 16 May 2010 04:49:53 -0400 Subject: [PATCH] compiler: hack to make XCreateIC() work on x86-64 --- basis/compiler/cfg/builder/alien/alien.factor | 2 +- basis/compiler/cfg/instructions/instructions.factor | 2 ++ basis/compiler/codegen/codegen.factor | 1 + basis/cpu/architecture/architecture.factor | 4 ++++ basis/cpu/x86/64/unix/unix.factor | 2 ++ 5 files changed, 10 insertions(+), 1 deletion(-) diff --git a/basis/compiler/cfg/builder/alien/alien.factor b/basis/compiler/cfg/builder/alien/alien.factor index 8918ca1482..eee2120666 100644 --- a/basis/compiler/cfg/builder/alien/alien.factor +++ b/basis/compiler/cfg/builder/alien/alien.factor @@ -108,7 +108,7 @@ M: #alien-invoke emit-node [ { [ caller-parameters ] - [ alien-invoke-dlsym ##alien-invoke ] + [ ##prepare-var-args alien-invoke-dlsym ##alien-invoke ] [ emit-stack-frame ] [ box-return* ] } cleave diff --git a/basis/compiler/cfg/instructions/instructions.factor b/basis/compiler/cfg/instructions/instructions.factor index 71408b2810..9211b7f8cf 100644 --- a/basis/compiler/cfg/instructions/instructions.factor +++ b/basis/compiler/cfg/instructions/instructions.factor @@ -671,6 +671,8 @@ INSN: ##allot-byte-array def: dst/tagged-rep literal: size ; +INSN: ##prepare-var-args ; + INSN: ##alien-invoke literal: symbols dll ; diff --git a/basis/compiler/codegen/codegen.factor b/basis/compiler/codegen/codegen.factor index fc02c429f8..a88e1df723 100755 --- a/basis/compiler/codegen/codegen.factor +++ b/basis/compiler/codegen/codegen.factor @@ -294,6 +294,7 @@ CODEGEN: ##prepare-struct-caller %prepare-struct-caller CODEGEN: ##box %box CODEGEN: ##box-long-long %box-long-long CODEGEN: ##allot-byte-array %allot-byte-array +CODEGEN: ##prepare-var-args %prepare-var-args CODEGEN: ##alien-invoke %alien-invoke CODEGEN: ##cleanup %cleanup CODEGEN: ##alien-indirect %alien-indirect diff --git a/basis/cpu/architecture/architecture.factor b/basis/cpu/architecture/architecture.factor index 694c77336f..289ccc65ca 100644 --- a/basis/cpu/architecture/architecture.factor +++ b/basis/cpu/architecture/architecture.factor @@ -589,6 +589,10 @@ HOOK: %restore-context cpu ( temp1 temp2 -- ) HOOK: %save-context cpu ( temp1 temp2 -- ) +HOOK: %prepare-var-args cpu ( -- ) + +M: object %prepare-var-args ; + HOOK: %alien-invoke cpu ( function library -- ) HOOK: %cleanup cpu ( n -- ) diff --git a/basis/cpu/x86/64/unix/unix.factor b/basis/cpu/x86/64/unix/unix.factor index eb68a6b7d7..c25cfa19ec 100644 --- a/basis/cpu/x86/64/unix/unix.factor +++ b/basis/cpu/x86/64/unix/unix.factor @@ -46,3 +46,5 @@ M: x86.64 dummy-int-params? f ; M: x86.64 dummy-fp-params? f ; M: x86.64 temp-reg R8 ; + +M: x86.64 %prepare-var-args RAX RAX XOR ;