}
fn classify_struct(tys: &[Type],
- cls: &mut [RegClass], i: uint,
- off: uint) {
+ cls: &mut [RegClass],
+ i: uint,
+ off: uint,
+ packed: bool) {
let mut field_off = off;
for ty in tys.iter() {
- field_off = align(field_off, *ty);
+ if !packed {
+ field_off = align(field_off, *ty);
+ }
classify(*ty, cls, i, field_off);
field_off += ty_size(*ty);
}
unify(cls, ix + off / 8u, SSEDs);
}
Struct => {
- classify_struct(ty.field_types().as_slice(), cls, ix, off);
+ classify_struct(ty.field_types().as_slice(), cls, ix, off, ty.is_packed());
}
Array => {
let len = ty.array_length();