@@ -267,7 +267,7 @@ struct
267267 match op with
268268 | Ops. Satur01_gate -> (
269269 match prec with
270- | Ops. Byte_prec _ | Ops. Uint16_prec _ | Ops. Int32_prec _ ->
270+ | Ops. Byte_prec _ | Ops. Uint16_prec _ | Ops. Int32_prec _ | Ops. Uint4x32_prec _ ->
271271 let open PPrint in
272272 group
273273 (parens
@@ -592,16 +592,44 @@ module C_syntax (B : C_syntax_config) = struct
592592 let prefix, postfix = B. convert_precision ~from: scope_prec ~to_: prec in
593593 let expr = string prefix ^^ string (" v" ^ Int. to_string id.scope_id) ^^ string postfix in
594594 (empty, expr)
595- | Access (Ops . Merge_buffer { source_node_id } , Some idcs ) ->
596- let tn = Option. value_exn ~here: [ % here] @@ Tn. find ~id: source_node_id in
595+ | Access (Low_level . Merge_buffer { source } , Some idcs ) ->
596+ let tn = source in
597597 let from_prec = Lazy. force tn.prec in
598598 let prefix, postfix = B. convert_precision ~from: from_prec ~to_: prec in
599599 let offset_doc = pp_array_offset (idcs, Lazy. force tn.dims) in
600600 let expr =
601601 string prefix ^^ string " merge_buffer" ^^ brackets offset_doc ^^ string postfix
602602 in
603603 (empty, expr)
604- | Access _ -> failwith " C_syntax: Access / FFI NOT IMPLEMENTED YET"
604+ | Access (Low_level. C_function f_name , None) ->
605+ let expr = string (f_name ^ " ()" ) in
606+ (empty, expr)
607+ | Access (Low_level. External_unsafe { ptr; prec = source_prec ; dims } , Some idcs ) ->
608+ let dims_val = Lazy. force dims in
609+ let prefix, postfix = B. convert_precision ~from: source_prec ~to_: prec in
610+ let offset_doc = pp_array_offset (idcs, dims_val) in
611+ let ptr_str = Ops. c_rawptr_to_string (Ctypes. raw_address_of_ptr @@ Ctypes. to_voidp ptr) source_prec in
612+ let expr =
613+ string prefix ^^ string (" (*(" ^ ptr_str ^ " + " ) ^^ offset_doc ^^ string " ))" ^^ string postfix
614+ in
615+ (empty, expr)
616+ | Access (Low_level. File_mapped (file , source_prec ), Some idcs ) ->
617+ let prefix, postfix = B. convert_precision ~from: source_prec ~to_: prec in
618+ let expr =
619+ string prefix ^^ string (" file_mapped_data_" ^ file ^ " [" ) ^^ pp_array_offset (idcs, [||]) ^^ string " ]" ^^ string postfix
620+ in
621+ (empty, expr)
622+ | Access (Low_level. Uint4x32_to_prec_uniform { source; prec = source_prec } , Some idcs ) ->
623+ let tn = source in
624+ let prefix, postfix = B. convert_precision ~from: source_prec ~to_: prec in
625+ let offset_doc = pp_array_offset (idcs, Lazy. force tn.dims) in
626+ let source_ident = string (get_ident tn) in
627+ let expr =
628+ string prefix ^^ string (" uint4x32_to_" ^ Ops. prec_string source_prec ^ " _uniform(" )
629+ ^^ source_ident ^^ brackets offset_doc ^^ string " )" ^^ string postfix
630+ in
631+ (empty, expr)
632+ | Access _ -> failwith " C_syntax: Access cases with wrong indices / FFI NOT IMPLEMENTED YET"
605633 | Get (tn , idcs ) ->
606634 let ident_doc = string (get_ident tn) in
607635 let from_prec = Lazy. force tn.prec in
@@ -665,8 +693,8 @@ module C_syntax (B : C_syntax_config) = struct
665693 let prefix, postfix = B. convert_precision ~from: scope_prec ~to_: prec in
666694 let v_doc = string prefix ^^ string (" v" ^ Int. to_string id.scope_id) ^^ string postfix in
667695 (v_doc ^^ braces (string (" =" ^ B. float_log_style)), [ `Value v_doc ])
668- | Access (Ops . Merge_buffer { source_node_id } , Some idcs ) ->
669- let tn = Option. value_exn ~here: [ % here] @@ Tn. find ~id: source_node_id in
696+ | Access (Low_level . Merge_buffer { source } , Some idcs ) ->
697+ let tn = source in
670698 let from_prec = Lazy. force tn.prec in
671699 let dims = Lazy. force tn.dims in
672700 let prefix, postfix = B. convert_precision ~from: from_prec ~to_: prec in
@@ -681,7 +709,46 @@ module C_syntax (B : C_syntax_config) = struct
681709 ^^ braces (string (" =" ^ B. float_log_style))
682710 in
683711 (expr_doc, [ `Accessor (idcs, dims); `Value access_doc ])
684- | Access _ -> failwith " C_syntax: Access / FFI NOT IMPLEMENTED YET"
712+ | Access (Low_level. C_function f_name , None) ->
713+ let expr_doc = string (f_name ^ " ()" ) in
714+ (expr_doc, [] )
715+ | Access (Low_level. External_unsafe { ptr; prec = source_prec ; dims } , Some idcs ) ->
716+ let dims_val = Lazy. force dims in
717+ let prefix, postfix = B. convert_precision ~from: source_prec ~to_: prec in
718+ let offset_doc = pp_array_offset (idcs, dims_val) in
719+ let ptr_str = Ops. c_rawptr_to_string (Ctypes. raw_address_of_ptr @@ Ctypes. to_voidp ptr) source_prec in
720+ let access_doc =
721+ string prefix ^^ string (" (*(" ^ ptr_str ^ " + " ) ^^ offset_doc ^^ string " ))" ^^ string postfix
722+ in
723+ let expr_doc =
724+ string prefix ^^ string (" external[%u]{=" ^ B. float_log_style ^ " }" ) ^^ string postfix
725+ in
726+ (expr_doc, [ `Accessor (idcs, dims_val); `Value access_doc ])
727+ | Access (Low_level. File_mapped (file , source_prec ), Some idcs ) ->
728+ let prefix, postfix = B. convert_precision ~from: source_prec ~to_: prec in
729+ let access_doc =
730+ string prefix ^^ string (" file_mapped_data_" ^ file ^ " [" ) ^^ pp_array_offset (idcs, [||]) ^^ string " ]" ^^ string postfix
731+ in
732+ let expr_doc =
733+ string prefix ^^ string (" file_mapped_" ^ file ^ " [%u]{=" ^ B. float_log_style ^ " }" ) ^^ string postfix
734+ in
735+ (expr_doc, [ `Accessor (idcs, [||]); `Value access_doc ])
736+ | Access (Low_level. Uint4x32_to_prec_uniform { source; prec = source_prec } , Some idcs ) ->
737+ let tn = source in
738+ let prefix, postfix = B. convert_precision ~from: source_prec ~to_: prec in
739+ let dims = Lazy. force tn.dims in
740+ let offset_doc = pp_array_offset (idcs, dims) in
741+ let source_ident = string (get_ident tn) in
742+ let access_doc =
743+ string prefix ^^ string (" uint4x32_to_" ^ Ops. prec_string source_prec ^ " _uniform(" )
744+ ^^ source_ident ^^ brackets offset_doc ^^ string " )" ^^ string postfix
745+ in
746+ let expr_doc =
747+ string prefix ^^ string (" uint4x32_to_" ^ Ops. prec_string source_prec ^ " _uniform(" )
748+ ^^ source_ident ^^ brackets (string " %u" ) ^^ string " ){=" ^^ string B. float_log_style ^^ string " }" ^^ string postfix
749+ in
750+ (expr_doc, [ `Accessor (idcs, dims); `Value access_doc ])
751+ | Access _ -> failwith " C_syntax: Access cases with wrong indices / FFI NOT IMPLEMENTED YET"
685752 | Get (tn , idcs ) ->
686753 let ident_doc = string (get_ident tn) in
687754 let from_prec = Lazy. force tn.prec in
0 commit comments