// loadByType returns the load instruction of the given type. func loadByType(t ssa.Type) obj.As { if t.IsFloat() { switch t.Size() { case 4: return arm.AMOVF case 8: return arm.AMOVD } } else { switch t.Size() { case 1: if t.IsSigned() { return arm.AMOVB } else { return arm.AMOVBU } case 2: if t.IsSigned() { return arm.AMOVH } else { return arm.AMOVHU } case 4: return arm.AMOVW } } panic("bad load type") }
// loadByType returns the load instruction of the given type. func loadByType(t ssa.Type, r int16) obj.As { if isFPreg(r) { if t.Size() == 4 { // float32 or int32 return mips.AMOVF } else { // float64 or int64 return mips.AMOVD } } else { switch t.Size() { case 1: if t.IsSigned() { return mips.AMOVB } else { return mips.AMOVBU } case 2: if t.IsSigned() { return mips.AMOVH } else { return mips.AMOVHU } case 4: return mips.AMOVW } } panic("bad load type") }
// loadByType returns the load instruction of the given type. func loadByType(t ssa.Type, r int16) obj.As { if mips.REG_F0 <= r && r <= mips.REG_F31 { if t.IsFloat() && t.Size() == 4 { // float32 return mips.AMOVF } else { // float64 or integer in FP register return mips.AMOVD } } else { switch t.Size() { case 1: if t.IsSigned() { return mips.AMOVB } else { return mips.AMOVBU } case 2: if t.IsSigned() { return mips.AMOVH } else { return mips.AMOVHU } case 4: if t.IsSigned() { return mips.AMOVW } else { return mips.AMOVWU } case 8: return mips.AMOVV } } panic("bad load type") }
// loadByType returns the load instruction of the given type. func loadByType(t ssa.Type) obj.As { if t.IsFloat() { switch t.Size() { case 4: return s390x.AFMOVS case 8: return s390x.AFMOVD } } else { switch t.Size() { case 1: if t.IsSigned() { return s390x.AMOVB } else { return s390x.AMOVBZ } case 2: if t.IsSigned() { return s390x.AMOVH } else { return s390x.AMOVHZ } case 4: if t.IsSigned() { return s390x.AMOVW } else { return s390x.AMOVWZ } case 8: return s390x.AMOVD } } panic("bad load type") }