1
1
2
2
import std:: str;
3
+ import driver:: session;
3
4
import middle:: trans;
4
5
import trans:: decl_cdecl_fn;
5
6
import middle:: trans_common:: { T_f32 , T_f64 , T_fn , T_bool , T_i1 , T_i8 , T_i32 ,
@@ -32,7 +33,9 @@ type upcalls =
32
33
call_c_stack_float : ValueRef ,
33
34
rust_personality : ValueRef } ;
34
35
35
- fn declare_upcalls ( _tn : type_names , tydesc_type : TypeRef ,
36
+ fn declare_upcalls ( targ_cfg : @session:: config ,
37
+ _tn : type_names ,
38
+ tydesc_type : TypeRef ,
36
39
llmod : ModuleRef ) -> @upcalls {
37
40
fn decl ( llmod : ModuleRef , name : str , tys : [ TypeRef ] , rv : TypeRef ) ->
38
41
ValueRef {
@@ -44,25 +47,35 @@ fn declare_upcalls(_tn: type_names, tydesc_type: TypeRef,
44
47
let d = bind decl ( llmod, _, _, _) ;
45
48
let dv = bind decl ( llmod, _, _, T_void ( ) ) ;
46
49
47
- ret @{ _fail : dv ( "fail" , [ T_ptr ( T_i8 ( ) ) , T_ptr ( T_i8 ( ) ) , T_size_t ( ) ] ) ,
50
+ let int_t = T_int ( targ_cfg) ;
51
+ let size_t = T_size_t ( targ_cfg) ;
52
+ let opaque_vec_t = T_opaque_vec ( targ_cfg) ;
53
+
54
+ ret @{ _fail : dv ( "fail" , [ T_ptr ( T_i8 ( ) ) ,
55
+ T_ptr ( T_i8 ( ) ) ,
56
+ size_t] ) ,
48
57
malloc :
49
- d ( "malloc" , [ T_size_t ( ) , T_ptr ( tydesc_type) ] , T_ptr ( T_i8 ( ) ) ) ,
50
- free : dv ( "free" , [ T_ptr ( T_i8 ( ) ) , T_int ( ) ] ) ,
58
+ d ( "malloc" , [ size_t, T_ptr ( tydesc_type) ] ,
59
+ T_ptr ( T_i8 ( ) ) ) ,
60
+ free : dv ( "free" , [ T_ptr ( T_i8 ( ) ) , int_t] ) ,
51
61
shared_malloc :
52
- d ( "shared_malloc" , [ T_size_t ( ) , T_ptr ( tydesc_type) ] ,
62
+ d ( "shared_malloc" , [ size_t , T_ptr ( tydesc_type) ] ,
53
63
T_ptr ( T_i8 ( ) ) ) ,
54
64
shared_free : dv ( "shared_free" , [ T_ptr ( T_i8 ( ) ) ] ) ,
55
- mark : d ( "mark" , [ T_ptr ( T_i8 ( ) ) ] , T_int ( ) ) ,
65
+ mark : d ( "mark" , [ T_ptr ( T_i8 ( ) ) ] , int_t ) ,
56
66
get_type_desc :
57
67
d ( "get_type_desc" ,
58
- [ T_ptr ( T_nil ( ) ) , T_size_t ( ) , T_size_t ( ) , T_size_t ( ) ,
59
- T_ptr ( T_ptr ( tydesc_type) ) , T_int ( ) ] , T_ptr ( tydesc_type) ) ,
68
+ [ T_ptr ( T_nil ( ) ) , size_t,
69
+ size_t, size_t,
70
+ T_ptr ( T_ptr ( tydesc_type) ) , int_t] ,
71
+ T_ptr ( tydesc_type) ) ,
60
72
vec_grow :
61
- dv ( "vec_grow" , [ T_ptr ( T_ptr ( T_opaque_vec ( ) ) ) , T_int ( ) ] ) ,
73
+ dv ( "vec_grow" , [ T_ptr ( T_ptr ( opaque_vec_t) ) ,
74
+ int_t] ) ,
62
75
vec_push :
63
76
dv ( "vec_push" ,
64
- [ T_ptr ( T_ptr ( T_opaque_vec ( ) ) ) , T_ptr ( tydesc_type) ,
65
- T_ptr ( T_i8 ( ) ) ] ) ,
77
+ [ T_ptr ( T_ptr ( opaque_vec_t ) ) , T_ptr ( tydesc_type) ,
78
+ T_ptr ( T_i8 ( ) ) ] ) ,
66
79
cmp_type :
67
80
dv ( "cmp_type" ,
68
81
[ T_ptr ( T_i1 ( ) ) , T_ptr ( tydesc_type) ,
@@ -72,13 +85,13 @@ fn declare_upcalls(_tn: type_names, tydesc_type: TypeRef,
72
85
dv ( "log_type" , [ T_ptr ( tydesc_type) , T_ptr ( T_i8 ( ) ) , T_i32 ( ) ] ) ,
73
86
dynastack_mark : d ( "dynastack_mark" , [ ] , T_ptr ( T_i8 ( ) ) ) ,
74
87
dynastack_alloc :
75
- d ( "dynastack_alloc_2" , [ T_size_t ( ) , T_ptr ( tydesc_type) ] ,
88
+ d ( "dynastack_alloc_2" , [ size_t , T_ptr ( tydesc_type) ] ,
76
89
T_ptr ( T_i8 ( ) ) ) ,
77
90
dynastack_free : dv ( "dynastack_free" , [ T_ptr ( T_i8 ( ) ) ] ) ,
78
91
alloc_c_stack : d ( "alloc_c_stack" , [ T_size_t ( ) ] , T_ptr ( T_i8 ( ) ) ) ,
79
92
call_c_stack : d ( "call_c_stack" ,
80
93
[ T_ptr ( T_fn ( [ ] , T_int ( ) ) ) , T_ptr ( T_i8 ( ) ) ] ,
81
- T_int ( ) ) ,
94
+ int_t ) ,
82
95
call_c_stack_i64 : d ( "call_c_stack_i64" ,
83
96
[ T_ptr ( T_fn ( [ ] , T_int ( ) ) ) , T_ptr ( T_i8 ( ) ) ] ,
84
97
T_i64 ( ) ) ,
0 commit comments