;; The internal calling convention, which the fizz program does not touch at ;; all: an aggregate argument, an aggregate return, a float in the SSE half, ;; and more integer arguments than there are registers for. (defstruct V3 [x f32 y f32 z f32]) (defn scale [v V3 k f32] V3 (V3 {.x (* (.x v) k) .y (* (.y v) k) .z (* (.z v) k)})) (defn sum3 [v V3] f32 (+ (+ (.x v) (.y v)) (.z v))) (defn eight [a i64 b i64 c i64 d i64 e i64 f i64 g i64 h i64] i64 (+ (+ (+ a b) (+ c d)) (+ (+ e f) (+ g h)))) (defn taglen [s [u8]] i64 (i64 (len s))) (defn main [] i32 (let [v (V3 {.x 1.0 .y 2.0 .z 3.0}) w (scale v 2.0)] (print (sum3 v)) (println "") (print (sum3 w)) (println "") (print (eight 1 2 3 4 5 6 7 8)) (println "") (print (taglen (bytes "hello"))) (println "") (print (.z w)) (println "")) 0)