@@ -126,8 +126,8 @@ impl Pointer {
126
126
) -> Value {
127
127
match self . base {
128
128
PointerBase :: Addr ( base_addr) => fx. bcx . ins ( ) . load ( ty, flags, base_addr, self . offset ) ,
129
- PointerBase :: Stack ( stack_slot) => if ty == types:: I128 {
130
- // WORKAROUND for stack_load.i128 not being implemented
129
+ PointerBase :: Stack ( stack_slot) => if ty == types:: I128 || ty . is_vector ( ) {
130
+ // WORKAROUND for stack_load.i128 and stack_load.iXxY not being implemented
131
131
let base_addr = fx. bcx . ins ( ) . stack_addr ( fx. pointer_type , stack_slot, 0 ) ;
132
132
fx. bcx . ins ( ) . load ( ty, flags, base_addr, self . offset )
133
133
} else {
@@ -146,12 +146,15 @@ impl Pointer {
146
146
PointerBase :: Addr ( base_addr) => {
147
147
fx. bcx . ins ( ) . store ( flags, value, base_addr, self . offset ) ;
148
148
}
149
- PointerBase :: Stack ( stack_slot) => if fx. bcx . func . dfg . value_type ( value) == types:: I128 {
150
- // WORKAROUND for stack_load.i128 not being implemented
151
- let base_addr = fx. bcx . ins ( ) . stack_addr ( fx. pointer_type , stack_slot, 0 ) ;
152
- fx. bcx . ins ( ) . store ( flags, value, base_addr, self . offset ) ;
153
- } else {
154
- fx. bcx . ins ( ) . stack_store ( value, stack_slot, self . offset ) ;
149
+ PointerBase :: Stack ( stack_slot) => {
150
+ let val_ty = fx. bcx . func . dfg . value_type ( value) ;
151
+ if val_ty == types:: I128 || val_ty. is_vector ( ) {
152
+ // WORKAROUND for stack_store.i128 and stack_store.iXxY not being implemented
153
+ let base_addr = fx. bcx . ins ( ) . stack_addr ( fx. pointer_type , stack_slot, 0 ) ;
154
+ fx. bcx . ins ( ) . store ( flags, value, base_addr, self . offset ) ;
155
+ } else {
156
+ fx. bcx . ins ( ) . stack_store ( value, stack_slot, self . offset ) ;
157
+ }
155
158
}
156
159
}
157
160
}
0 commit comments