@@ -59,35 +59,35 @@ pub enum Linkage {
59
59
}
60
60
61
61
pub enum Attribute {
62
- ZExtAttribute = 1 ,
63
- SExtAttribute = 2 ,
64
- NoReturnAttribute = 4 ,
65
- InRegAttribute = 8 ,
66
- StructRetAttribute = 16 ,
67
- NoUnwindAttribute = 32 ,
68
- NoAliasAttribute = 64 ,
69
- ByValAttribute = 128 ,
70
- NestAttribute = 256 ,
71
- ReadNoneAttribute = 512 ,
72
- ReadOnlyAttribute = 1024 ,
73
- NoInlineAttribute = 2048 ,
74
- AlwaysInlineAttribute = 4096 ,
75
- OptimizeForSizeAttribute = 8192 ,
76
- StackProtectAttribute = 16384 ,
77
- StackProtectReqAttribute = 32768 ,
78
- // 31 << 16
79
- AlignmentAttribute = 2031616 ,
80
- NoCaptureAttribute = 2097152 ,
81
- NoRedZoneAttribute = 4194304 ,
82
- NoImplicitFloatAttribute = 8388608 ,
83
- NakedAttribute = 16777216 ,
84
- InlineHintAttribute = 33554432 ,
85
- // 7 << 26
86
- StackAttribute = 469762048 ,
87
- ReturnsTwiceAttribute = 536870912 ,
88
- // 1 << 30
89
- UWTableAttribute = 1073741824 ,
90
- NonLazyBindAttribute = 2147483648 ,
62
+ ZExtAttribute = 1 << 0 ,
63
+ SExtAttribute = 1 << 1 ,
64
+ NoReturnAttribute = 1 << 2 ,
65
+ InRegAttribute = 1 << 3 ,
66
+ StructRetAttribute = 1 << 4 ,
67
+ NoUnwindAttribute = 1 << 5 ,
68
+ NoAliasAttribute = 1 << 6 ,
69
+ ByValAttribute = 1 << 7 ,
70
+ NestAttribute = 1 << 8 ,
71
+ ReadNoneAttribute = 1 << 9 ,
72
+ ReadOnlyAttribute = 1 << 10 ,
73
+ NoInlineAttribute = 1 << 11 ,
74
+ AlwaysInlineAttribute = 1 << 12 ,
75
+ OptimizeForSizeAttribute = 1 << 13 ,
76
+ StackProtectAttribute = 1 << 14 ,
77
+ StackProtectReqAttribute = 1 << 15 ,
78
+ AlignmentAttribute = 31 << 16 ,
79
+ NoCaptureAttribute = 1 << 21 ,
80
+ NoRedZoneAttribute = 1 << 22 ,
81
+ NoImplicitFloatAttribute = 1 << 23 ,
82
+ NakedAttribute = 1 << 24 ,
83
+ InlineHintAttribute = 1 << 25 ,
84
+ StackAttribute = 7 << 26 ,
85
+ ReturnsTwiceAttribute = 1 << 29 ,
86
+ UWTableAttribute = 1 << 30 ,
87
+ NonLazyBindAttribute = 1 << 31 ,
88
+
89
+ // Not added to LLVM yet, so may need to stay updated if LLVM changes.
90
+ FixedStackSegment = 1 << 41 ,
91
91
}
92
92
93
93
// enum for the LLVM IntPredicate type
@@ -2118,6 +2118,15 @@ pub fn ConstFCmp(Pred: RealPredicate, V1: ValueRef, V2: ValueRef) -> ValueRef {
2118
2118
llvm:: LLVMConstFCmp ( Pred as c_ushort , V1 , V2 )
2119
2119
}
2120
2120
}
2121
+
2122
+ pub fn SetFunctionAttribute ( Fn : ValueRef , attr : Attribute ) {
2123
+ unsafe {
2124
+ let attr = attr as u64 ;
2125
+ let lower = attr & 0xffffffff ;
2126
+ let upper = ( attr >> 32 ) & 0xffffffff ;
2127
+ llvm:: LLVMAddFunctionAttr ( Fn , lower as c_uint , upper as c_uint ) ;
2128
+ }
2129
+ }
2121
2130
/* Memory-managed object interface to type handles. */
2122
2131
2123
2132
pub struct TypeNames {
0 commit comments