summaryrefslogtreecommitdiff
path: root/src/ChezScheme/mats/foreign.ms
diff options
context:
space:
mode:
Diffstat (limited to 'src/ChezScheme/mats/foreign.ms')
-rw-r--r--src/ChezScheme/mats/foreign.ms64
1 files changed, 59 insertions, 5 deletions
diff --git a/src/ChezScheme/mats/foreign.ms b/src/ChezScheme/mats/foreign.ms
index de2c6d86bf..6ff0133bfc 100644
--- a/src/ChezScheme/mats/foreign.ms
+++ b/src/ChezScheme/mats/foreign.ms
@@ -221,7 +221,7 @@
(error? (load-shared-object 3))
)
]
- [(i3osx ti3osx a6osx ta6osx)
+ [(i3osx ti3osx a6osx ta6osx ppc32osx tppc32osx arm64osx tarm64osx)
(mat load-shared-object
(file-exists? "foreign1.so")
(begin (load-shared-object "./foreign1.so") #t)
@@ -1044,10 +1044,13 @@
(define call-df (foreign-procedure "call_df" (ptr double-float int int) double-float))
(define call-varargs-df (foreign-procedure "call_varargs_df" (ptr double-float int int) double-float))
(define call-varargs-i7df (foreign-procedure "call_varargs_i7df" (ptr int
- double-float double-float double-float
- double-float double-float double-float
- double-float)
+ double-float double-float double-float
+ double-float double-float double-float
+ double-float)
double-float))
+ (define call-varargs-dfii (foreign-procedure "call_varargs_dfii" (ptr double-float int int) double-float))
+ (define call-varargs-dfidf (foreign-procedure "call_varargs_dfidf" (ptr double-float int double-float) double-float))
+ (define call-varargs-dfsfi (foreign-procedure "call_varargs_dfsfi" (ptr double-float single-float int) double-float))
(define ($test-call-int signed? size call-int make-fc)
(define n10000 (expt 256 size))
(define nffff (- n10000 1))
@@ -1178,6 +1181,35 @@
1 2.2 3.2 4.5 6.7 8.9 10.1 11.5)
55.1)
+ (equal?
+ (call-varargs-dfii
+ (foreign-callable
+ (__varargs_after 2)
+ (lambda (x y z) (+ x y z))
+ (double-float int int) double-float)
+ 10.25 20 300)
+ 620.25)
+
+ (equal?
+ (call-varargs-dfidf
+ (foreign-callable
+ (__varargs_after 2)
+ (lambda (x y z) (+ x y z))
+ (double-float int double-float) double-float)
+ 10.25 20 300.25)
+ 330.75)
+
+ (equal?
+ (call-varargs-dfsfi
+ (foreign-callable
+ (__varargs_after 2)
+ (lambda (x y z) (+ x y z))
+ (double-float single-float int) double-float)
+ 10.25 20.0 300)
+ 620.5)
+
+ ;(define call-varargs-dfsfi (foreign-procedure #;__varargs #;2 "call_varargs_dfsfi" (ptr double-float single-float int) double-float))
+
(error?
(call-i8
(foreign-callable
@@ -2735,9 +2767,15 @@
'(load-shared-object "libc.so.7")]
[(i3nt ti3nt a6nt ta6nt)
'(load-shared-object "msvcrt.dll")]
- [(i3osx ti3osx a6osx ta6osx)
+ [(i3osx ti3osx a6osx ta6osx ppc32osx tppc32osx arm64osx tarm64osx)
'(load-shared-object "libc.dylib")]
[else (error 'load-libc "unrecognized machine type ~s" (machine-type))]))
+ (define varargs_df (foreign-procedure (__varargs_after 1) "varargs_df" (double int int) double))
+ (define varargs_dfii (foreign-procedure (__varargs_after 2) "varargs_dfii" (double int int) double))
+ (define varargs_dfidf (foreign-procedure (__varargs_after 2) "varargs_dfidf" (double int double) double))
+ (define varargs_sfdfi (foreign-procedure (__varargs_after 2) "varargs_sfdfi" (float double int) double))
+ (define varargs_i7df (foreign-procedure (__varargs_after 1) "varargs_i7df" (int double double double double double double double)
+ double))
#t)
(equal?
(with-input-from-string
@@ -2798,6 +2836,22 @@
(double-float double-float) single-float)
3.5 -5.25)))
3.25)
+
+ (equal?
+ (varargs_df 13.5 7 10)
+ 30.5)
+ (equal?
+ (varargs_dfii 13.5 -7 -10)
+ -3.5)
+ (equal?
+ (varargs_dfidf 13.5 10 7.5)
+ 31.0)
+ (equal?
+ (varargs_sfdfi 10.5 3.25 8)
+ 21.75)
+ (equal?
+ (varargs_i7df 1 2.0 3.0 4.0 5.0 6.0 7.0 8.0)
+ 36.0)
)
(mat structs