@@ -126,11 +126,10 @@ fn classify_ty(ty: Type) -> ~[RegClass] {
126126 Float => 4 ,
127127 Double => 8 ,
128128 Struct => {
129+ let str_tys = ty. field_types ( ) ;
129130 if ty. is_packed ( ) {
130- let str_tys = ty. field_types ( ) ;
131131 str_tys. iter ( ) . fold ( 0 , |s, t| s + ty_size ( * t) )
132132 } else {
133- let str_tys = ty. field_types ( ) ;
134133 let size = str_tys. iter ( ) . fold ( 0 , |s, t| align ( s, * t) + ty_size ( * t) ) ;
135134 align ( size, ty)
136135 }
@@ -240,9 +239,7 @@ fn classify_ty(ty: Type) -> ~[RegClass] {
240239 let mut i = 0 u;
241240 let ty_kind = ty. kind ( ) ;
242241 let e = cls. len ( ) ;
243- if cls. len ( ) > 2 u &&
244- ( ty_kind == Struct ||
245- ty_kind == Array ) {
242+ if cls. len ( ) > 2 u && ( ty_kind == Struct || ty_kind == Array ) {
246243 if cls[ i] . is_sse ( ) {
247244 i += 1 u;
248245 while i < e {
@@ -269,7 +266,7 @@ fn classify_ty(ty: Type) -> ~[RegClass] {
269266 return ;
270267 }
271268 if cls[ i] == SSEUp {
272- cls[ i] = SSEInt ;
269+ cls[ i] = SSEDv ;
273270 } else if cls[ i] . is_sse ( ) {
274271 i += 1 ;
275272 while i != e && cls[ i] == SSEUp { i += 1 u; }
@@ -287,7 +284,6 @@ fn classify_ty(ty: Type) -> ~[RegClass] {
287284 let mut cls = vec:: from_elem ( words, NoClass ) ;
288285 if words > 4 {
289286 all_mem ( cls) ;
290- let cls = cls;
291287 return cls;
292288 }
293289 classify ( ty, cls, 0 , 0 ) ;
@@ -316,8 +312,8 @@ fn llreg_ty(cls: &[RegClass]) -> Type {
316312 tys. push ( Type :: i64 ( ) ) ;
317313 }
318314 SSEFv => {
319- let vec_len = llvec_len ( cls. tailn ( i + 1 u) ) * 2 u ;
320- let vec_ty = Type :: vector ( & Type :: f32 ( ) , vec_len as u64 ) ;
315+ let vec_len = llvec_len ( cls. tailn ( i + 1 u) ) ;
316+ let vec_ty = Type :: vector ( & Type :: f32 ( ) , ( vec_len * 2 u ) as u64 ) ;
321317 tys. push ( vec_ty) ;
322318 i += vec_len;
323319 loop ;
0 commit comments