@@ -184,9 +184,15 @@ static void handler_SERVICE_FREE(uint32_t device_id, uint64_t *payload) {
184
184
185
185
static bool trace_init = false ;
186
186
static bool host_exec_trace;
187
- static char * TrcStrs[HOSTEXEC_SID_VOID+1 ] = {" unsed" , " terminate" , " device_malloc" ,
188
- " host_malloc" , " free" , " printf" , " fprintf" , " ftnassign" , " sanatizer" ,
189
- " uint" , " uint64" , " double" , " int" , " long" , " float" , " void" };
187
+ #define _CCHAR (const char *)
188
+ static const char *TrcStrs[HOSTEXEC_SID_VOID + 1 ] = {
189
+ _CCHAR " unsed" , _CCHAR " terminate" , _CCHAR " device_malloc" ,
190
+ _CCHAR " host_malloc" , _CCHAR " free" , _CCHAR " printf" ,
191
+ _CCHAR " fprintf" , _CCHAR " ftnassign" , _CCHAR " sanatizer" ,
192
+ _CCHAR " uint" , _CCHAR " uint64" , _CCHAR " double" ,
193
+ _CCHAR " int" , _CCHAR " long" , _CCHAR " float" ,
194
+ _CCHAR " void" };
195
+ #undef _CCAR
190
196
// The consumer thread will serialize each active lane and call execute_service
191
197
// for the service request. These services are intended to be architecturally
192
198
// independent.
@@ -926,6 +932,43 @@ static service_rc hostrpc_call_fnptr(uint32_t NumArgs, void *fnptr,
926
932
return _RC_SUCCESS;
927
933
}
928
934
935
+ extern " C" {
936
+
937
+ extern void *V_FortranAioBeginExternalListOutput (void *fnptr, ...) {
938
+ va_list args;
939
+ va_start (args, fnptr);
940
+ uint32_t v0 = va_arg (args, uint32_t );
941
+ char *v1 = va_arg (args, char *);
942
+ uint32_t v2 = va_arg (args, uint32_t );
943
+ va_end (args);
944
+ return _FortranAioBeginExternalListOutput (v0, v1, v2);
945
+ }
946
+ extern bool V_FortranAioOutputAscii (void *fnptr, ...) {
947
+ va_list args;
948
+ va_start (args, fnptr);
949
+ void *v0 = va_arg (args, void *);
950
+ char *v1 = va_arg (args, char *);
951
+ uint64_t v2 = va_arg (args, uint64_t );
952
+ va_end (args);
953
+ return _FortranAioOutputAscii (v0, v1, v2);
954
+ }
955
+ extern bool V_FortranAioOutputInteger32 (void *fnptr, ...) {
956
+ va_list args;
957
+ va_start (args, fnptr);
958
+ void *v0 = va_arg (args, void *);
959
+ uint32_t v1 = va_arg (args, uint32_t );
960
+ va_end (args);
961
+ return _FortranAioOutputInteger32 (v0, v1);
962
+ }
963
+ extern uint32_t V_FortranAioEndIoStatement (void *fnptr, ...) {
964
+ va_list args;
965
+ va_start (args, fnptr);
966
+ void *v0 = va_arg (args, void *);
967
+ va_end (args);
968
+ return _FortranAioEndIoStatement (v0);
969
+ }
970
+ }
971
+
929
972
template <typename T, typename FT>
930
973
static service_rc hostexec_service (char *buf, size_t bufsz, T *return_value) {
931
974
if (bufsz == 0 )
@@ -959,6 +1002,24 @@ static service_rc hostexec_service(char *buf, size_t bufsz, T *return_value) {
959
1002
&data_not_used, a) != _RC_SUCCESS)
960
1003
return _RC_ERROR_INVALID_REQUEST;
961
1004
1005
+ uint64_t DeviceRuntime_idx = (uint64_t )fnptr;
1006
+ switch (DeviceRuntime_idx) {
1007
+ case _FortranAioBeginExternalListOutput_idx:
1008
+ fnptr = (void *)V_FortranAioBeginExternalListOutput;
1009
+ break ;
1010
+ case _FortranAioOutputAscii_idx:
1011
+ fnptr = (void *)V_FortranAioOutputAscii;
1012
+ break ;
1013
+ case _FortranAioOutputInteger32_idx:
1014
+ fnptr = (void *)V_FortranAioOutputInteger32;
1015
+ break ;
1016
+ case _FortranAioEndIoStatement_idx:
1017
+ fnptr = (void *)V_FortranAioEndIoStatement;
1018
+ break ;
1019
+ case _FortranAio_INVALID:
1020
+ default :
1021
+ break ;
1022
+ }
962
1023
if (hostrpc_call_fnptr<T, FT>(NumArgs, fnptr, a, return_value) != _RC_SUCCESS)
963
1024
return _RC_ERROR_INVALID_REQUEST;
964
1025
0 commit comments