define i32 @mulRI_X(i32 %x) {
; CHECK-LABEL: mulRI_X:
; CHECK: # %bb.0: # %entry
-; CHECK-NEXT: movi32 a1, 4097
-; CHECK-NEXT: mult16 a0, a1
+; CHECK-NEXT: lsli16 a1, a0, 12
+; CHECK-NEXT: addu16 a0, a1
; CHECK-NEXT: rts16
;
; GENERIC-LABEL: mulRI_X:
; GENERIC-NEXT: .cfi_def_cfa_offset 0
; GENERIC-NEXT: subi16 sp, sp, 4
; GENERIC-NEXT: .cfi_def_cfa_offset 4
-; GENERIC-NEXT: movi16 a1, 0
-; GENERIC-NEXT: lsli16 a2, a1, 24
-; GENERIC-NEXT: lsli16 a1, a1, 16
-; GENERIC-NEXT: or16 a1, a2
-; GENERIC-NEXT: movi16 a2, 16
-; GENERIC-NEXT: lsli16 a2, a2, 8
-; GENERIC-NEXT: or16 a2, a1
-; GENERIC-NEXT: movi16 a1, 1
-; GENERIC-NEXT: or16 a1, a2
-; GENERIC-NEXT: mult16 a0, a1
+; GENERIC-NEXT: lsli16 a1, a0, 12
+; GENERIC-NEXT: addu16 a0, a1, a0
; GENERIC-NEXT: addi16 sp, sp, 4
; GENERIC-NEXT: rts16
entry:
define i16 @MUL_SHORT_I(i16 %x) {
; CHECK-LABEL: MUL_SHORT_I:
; CHECK: # %bb.0: # %entry
-; CHECK-NEXT: movi16 a1, 3
-; CHECK-NEXT: mult16 a0, a1
+; CHECK-NEXT: ixh32 a0, a0, a0
; CHECK-NEXT: rts16
;
; GENERIC-LABEL: MUL_SHORT_I:
; GENERIC-NEXT: .cfi_def_cfa_offset 0
; GENERIC-NEXT: subi16 sp, sp, 4
; GENERIC-NEXT: .cfi_def_cfa_offset 4
-; GENERIC-NEXT: movi16 a1, 3
-; GENERIC-NEXT: mult16 a0, a1
+; GENERIC-NEXT: lsli16 a1, a0, 1
+; GENERIC-NEXT: addu16 a0, a1, a0
; GENERIC-NEXT: addi16 sp, sp, 4
; GENERIC-NEXT: rts16
entry:
define i8 @MUL_CHAR_I(i8 %x) {
; CHECK-LABEL: MUL_CHAR_I:
; CHECK: # %bb.0: # %entry
-; CHECK-NEXT: movih32 a1, 65535
-; CHECK-NEXT: ori32 a1, a1, 65533
-; CHECK-NEXT: mult16 a0, a1
+; CHECK-NEXT: ixh32 a0, a0, a0
+; CHECK-NEXT: movi16 a1, 0
+; CHECK-NEXT: subu16 a0, a1, a0
; CHECK-NEXT: rts16
;
; GENERIC-LABEL: MUL_CHAR_I:
; GENERIC-NEXT: .cfi_def_cfa_offset 0
; GENERIC-NEXT: subi16 sp, sp, 4
; GENERIC-NEXT: .cfi_def_cfa_offset 4
-; GENERIC-NEXT: movi16 a1, 255
-; GENERIC-NEXT: lsli16 a2, a1, 24
-; GENERIC-NEXT: lsli16 a3, a1, 16
-; GENERIC-NEXT: or16 a3, a2
-; GENERIC-NEXT: lsli16 a1, a1, 8
-; GENERIC-NEXT: or16 a1, a3
-; GENERIC-NEXT: movi16 a2, 253
-; GENERIC-NEXT: or16 a2, a1
-; GENERIC-NEXT: mult16 a0, a2
+; GENERIC-NEXT: lsli16 a1, a0, 1
+; GENERIC-NEXT: addu16 a0, a1, a0
+; GENERIC-NEXT: movi16 a1, 0
+; GENERIC-NEXT: subu16 a0, a1, a0
; GENERIC-NEXT: addi16 sp, sp, 4
; GENERIC-NEXT: rts16
entry:
; GENERIC-NEXT: rts16
; GENERIC-NEXT: .p2align 1
; GENERIC-NEXT: # %bb.1:
-; GENERIC-NEXT: .p2align 2
+; GENERIC-NEXT: .p2align 2, 0x0
; GENERIC-NEXT: .LCPI25_0:
; GENERIC-NEXT: .long __udivsi3
entry:
; GENERIC-NEXT: rts16
; GENERIC-NEXT: .p2align 1
; GENERIC-NEXT: # %bb.1:
-; GENERIC-NEXT: .p2align 2
+; GENERIC-NEXT: .p2align 2, 0x0
; GENERIC-NEXT: .LCPI26_0:
; GENERIC-NEXT: .long __udivsi3
entry:
; GENERIC-NEXT: rts16
; GENERIC-NEXT: .p2align 1
; GENERIC-NEXT: # %bb.1:
-; GENERIC-NEXT: .p2align 2
+; GENERIC-NEXT: .p2align 2, 0x0
; GENERIC-NEXT: .LCPI27_0:
; GENERIC-NEXT: .long __udivsi3
entry:
; GENERIC-NEXT: rts16
; GENERIC-NEXT: .p2align 1
; GENERIC-NEXT: # %bb.1:
-; GENERIC-NEXT: .p2align 2
+; GENERIC-NEXT: .p2align 2, 0x0
; GENERIC-NEXT: .LCPI28_0:
; GENERIC-NEXT: .long __udivsi3
entry:
; GENERIC-NEXT: rts16
; GENERIC-NEXT: .p2align 1
; GENERIC-NEXT: # %bb.1:
-; GENERIC-NEXT: .p2align 2
+; GENERIC-NEXT: .p2align 2, 0x0
; GENERIC-NEXT: .LCPI30_0:
; GENERIC-NEXT: .long __udivsi3
entry:
; GENERIC-NEXT: rts16
; GENERIC-NEXT: .p2align 1
; GENERIC-NEXT: # %bb.1:
-; GENERIC-NEXT: .p2align 2
+; GENERIC-NEXT: .p2align 2, 0x0
; GENERIC-NEXT: .LCPI32_0:
; GENERIC-NEXT: .long __divsi3
entry:
; GENERIC-NEXT: rts16
; GENERIC-NEXT: .p2align 1
; GENERIC-NEXT: # %bb.1:
-; GENERIC-NEXT: .p2align 2
+; GENERIC-NEXT: .p2align 2, 0x0
; GENERIC-NEXT: .LCPI33_0:
; GENERIC-NEXT: .long __divsi3
entry:
; GENERIC-NEXT: rts16
; GENERIC-NEXT: .p2align 1
; GENERIC-NEXT: # %bb.1:
-; GENERIC-NEXT: .p2align 2
+; GENERIC-NEXT: .p2align 2, 0x0
; GENERIC-NEXT: .LCPI34_0:
; GENERIC-NEXT: .long __divsi3
entry:
; GENERIC-NEXT: rts16
; GENERIC-NEXT: .p2align 1
; GENERIC-NEXT: # %bb.1:
-; GENERIC-NEXT: .p2align 2
+; GENERIC-NEXT: .p2align 2, 0x0
; GENERIC-NEXT: .LCPI35_0:
; GENERIC-NEXT: .long __divsi3
entry:
; GENERIC-NEXT: rts16
; GENERIC-NEXT: .p2align 1
; GENERIC-NEXT: # %bb.1:
-; GENERIC-NEXT: .p2align 2
+; GENERIC-NEXT: .p2align 2, 0x0
; GENERIC-NEXT: .LCPI37_0:
; GENERIC-NEXT: .long __divsi3
entry:
define i32 @mul_i32_4097(i32 %x) {
; CHECK-LABEL: mul_i32_4097:
; CHECK: # %bb.0: # %entry
-; CHECK-NEXT: movi32 a1, 4097
-; CHECK-NEXT: mult16 a0, a1
+; CHECK-NEXT: lsli16 a1, a0, 12
+; CHECK-NEXT: addu16 a0, a1
; CHECK-NEXT: rts16
;
; GENERIC-LABEL: mul_i32_4097:
; GENERIC-NEXT: .cfi_def_cfa_offset 0
; GENERIC-NEXT: subi16 sp, sp, 4
; GENERIC-NEXT: .cfi_def_cfa_offset 4
-; GENERIC-NEXT: movi16 a1, 0
-; GENERIC-NEXT: lsli16 a2, a1, 24
-; GENERIC-NEXT: lsli16 a1, a1, 16
-; GENERIC-NEXT: or16 a1, a2
-; GENERIC-NEXT: movi16 a2, 16
-; GENERIC-NEXT: lsli16 a2, a2, 8
-; GENERIC-NEXT: or16 a2, a1
-; GENERIC-NEXT: movi16 a1, 1
-; GENERIC-NEXT: or16 a1, a2
-; GENERIC-NEXT: mult16 a0, a1
+; GENERIC-NEXT: lsli16 a1, a0, 12
+; GENERIC-NEXT: addu16 a0, a1, a0
; GENERIC-NEXT: addi16 sp, sp, 4
; GENERIC-NEXT: rts16
entry:
define i32 @mul_i32_4095(i32 %x) {
; CHECK-LABEL: mul_i32_4095:
; CHECK: # %bb.0: # %entry
-; CHECK-NEXT: movi32 a1, 4095
-; CHECK-NEXT: mult16 a0, a1
+; CHECK-NEXT: lsli16 a1, a0, 12
+; CHECK-NEXT: subu16 a0, a1, a0
; CHECK-NEXT: rts16
;
; GENERIC-LABEL: mul_i32_4095:
; GENERIC-NEXT: .cfi_def_cfa_offset 0
; GENERIC-NEXT: subi16 sp, sp, 4
; GENERIC-NEXT: .cfi_def_cfa_offset 4
-; GENERIC-NEXT: movi16 a1, 0
-; GENERIC-NEXT: lsli16 a2, a1, 24
-; GENERIC-NEXT: lsli16 a1, a1, 16
-; GENERIC-NEXT: or16 a1, a2
-; GENERIC-NEXT: movi16 a2, 15
-; GENERIC-NEXT: lsli16 a2, a2, 8
-; GENERIC-NEXT: or16 a2, a1
-; GENERIC-NEXT: movi16 a1, 255
-; GENERIC-NEXT: or16 a1, a2
-; GENERIC-NEXT: mult16 a0, a1
+; GENERIC-NEXT: lsli16 a1, a0, 12
+; GENERIC-NEXT: subu16 a0, a1, a0
; GENERIC-NEXT: addi16 sp, sp, 4
; GENERIC-NEXT: rts16
entry:
define i32 @mul_i32_minus_4095(i32 %x) {
; CHECK-LABEL: mul_i32_minus_4095:
; CHECK: # %bb.0: # %entry
-; CHECK-NEXT: movih32 a1, 65535
-; CHECK-NEXT: ori32 a1, a1, 61441
-; CHECK-NEXT: mult16 a0, a1
+; CHECK-NEXT: lsli16 a1, a0, 12
+; CHECK-NEXT: subu16 a0, a1
; CHECK-NEXT: rts16
;
; GENERIC-LABEL: mul_i32_minus_4095:
; GENERIC-NEXT: .cfi_def_cfa_offset 0
; GENERIC-NEXT: subi16 sp, sp, 4
; GENERIC-NEXT: .cfi_def_cfa_offset 4
-; GENERIC-NEXT: movi16 a1, 255
-; GENERIC-NEXT: lsli16 a2, a1, 24
-; GENERIC-NEXT: lsli16 a1, a1, 16
-; GENERIC-NEXT: or16 a1, a2
-; GENERIC-NEXT: movi16 a2, 240
-; GENERIC-NEXT: lsli16 a2, a2, 8
-; GENERIC-NEXT: or16 a2, a1
-; GENERIC-NEXT: movi16 a1, 1
-; GENERIC-NEXT: or16 a1, a2
-; GENERIC-NEXT: mult16 a0, a1
+; GENERIC-NEXT: lsli16 a1, a0, 12
+; GENERIC-NEXT: subu16 a0, a0, a1
; GENERIC-NEXT: addi16 sp, sp, 4
; GENERIC-NEXT: rts16
entry:
define i16 @mul_i16_4097(i16 %x) {
; CHECK-LABEL: mul_i16_4097:
; CHECK: # %bb.0: # %entry
-; CHECK-NEXT: movi32 a1, 4097
-; CHECK-NEXT: mult16 a0, a1
+; CHECK-NEXT: lsli16 a1, a0, 12
+; CHECK-NEXT: addu16 a0, a1
; CHECK-NEXT: rts16
;
; GENERIC-LABEL: mul_i16_4097:
; GENERIC-NEXT: .cfi_def_cfa_offset 0
; GENERIC-NEXT: subi16 sp, sp, 4
; GENERIC-NEXT: .cfi_def_cfa_offset 4
-; GENERIC-NEXT: movi16 a1, 0
-; GENERIC-NEXT: lsli16 a2, a1, 24
-; GENERIC-NEXT: lsli16 a1, a1, 16
-; GENERIC-NEXT: or16 a1, a2
-; GENERIC-NEXT: movi16 a2, 16
-; GENERIC-NEXT: lsli16 a2, a2, 8
-; GENERIC-NEXT: or16 a2, a1
-; GENERIC-NEXT: movi16 a1, 1
-; GENERIC-NEXT: or16 a1, a2
-; GENERIC-NEXT: mult16 a0, a1
+; GENERIC-NEXT: lsli16 a1, a0, 12
+; GENERIC-NEXT: addu16 a0, a1, a0
; GENERIC-NEXT: addi16 sp, sp, 4
; GENERIC-NEXT: rts16
entry:
define i16 @mul_i16_4095(i16 %x) {
; CHECK-LABEL: mul_i16_4095:
; CHECK: # %bb.0: # %entry
-; CHECK-NEXT: movi32 a1, 4095
-; CHECK-NEXT: mult16 a0, a1
+; CHECK-NEXT: lsli16 a1, a0, 12
+; CHECK-NEXT: subu16 a0, a1, a0
; CHECK-NEXT: rts16
;
; GENERIC-LABEL: mul_i16_4095:
; GENERIC-NEXT: .cfi_def_cfa_offset 0
; GENERIC-NEXT: subi16 sp, sp, 4
; GENERIC-NEXT: .cfi_def_cfa_offset 4
-; GENERIC-NEXT: movi16 a1, 0
-; GENERIC-NEXT: lsli16 a2, a1, 24
-; GENERIC-NEXT: lsli16 a1, a1, 16
-; GENERIC-NEXT: or16 a1, a2
-; GENERIC-NEXT: movi16 a2, 15
-; GENERIC-NEXT: lsli16 a2, a2, 8
-; GENERIC-NEXT: or16 a2, a1
-; GENERIC-NEXT: movi16 a1, 255
-; GENERIC-NEXT: or16 a1, a2
-; GENERIC-NEXT: mult16 a0, a1
+; GENERIC-NEXT: lsli16 a1, a0, 12
+; GENERIC-NEXT: subu16 a0, a1, a0
; GENERIC-NEXT: addi16 sp, sp, 4
; GENERIC-NEXT: rts16
entry:
define i16 @mul_i16_minus_4095(i16 %x) {
; CHECK-LABEL: mul_i16_minus_4095:
; CHECK: # %bb.0: # %entry
-; CHECK-NEXT: movih32 a1, 65535
-; CHECK-NEXT: ori32 a1, a1, 61441
-; CHECK-NEXT: mult16 a0, a1
+; CHECK-NEXT: lsli16 a1, a0, 12
+; CHECK-NEXT: subu16 a0, a1
; CHECK-NEXT: rts16
;
; GENERIC-LABEL: mul_i16_minus_4095:
; GENERIC-NEXT: .cfi_def_cfa_offset 0
; GENERIC-NEXT: subi16 sp, sp, 4
; GENERIC-NEXT: .cfi_def_cfa_offset 4
-; GENERIC-NEXT: movi16 a1, 255
-; GENERIC-NEXT: lsli16 a2, a1, 24
-; GENERIC-NEXT: lsli16 a1, a1, 16
-; GENERIC-NEXT: or16 a1, a2
-; GENERIC-NEXT: movi16 a2, 240
-; GENERIC-NEXT: lsli16 a2, a2, 8
-; GENERIC-NEXT: or16 a2, a1
-; GENERIC-NEXT: movi16 a1, 1
-; GENERIC-NEXT: or16 a1, a2
-; GENERIC-NEXT: mult16 a0, a1
+; GENERIC-NEXT: lsli16 a1, a0, 12
+; GENERIC-NEXT: subu16 a0, a0, a1
; GENERIC-NEXT: addi16 sp, sp, 4
; GENERIC-NEXT: rts16
entry:
define i8 @mul_i8_65(i8 %x) {
; CHECK-LABEL: mul_i8_65:
; CHECK: # %bb.0: # %entry
-; CHECK-NEXT: movi16 a1, 65
-; CHECK-NEXT: mult16 a0, a1
+; CHECK-NEXT: lsli16 a1, a0, 6
+; CHECK-NEXT: addu16 a0, a1
; CHECK-NEXT: rts16
;
; GENERIC-LABEL: mul_i8_65:
; GENERIC-NEXT: .cfi_def_cfa_offset 0
; GENERIC-NEXT: subi16 sp, sp, 4
; GENERIC-NEXT: .cfi_def_cfa_offset 4
-; GENERIC-NEXT: movi16 a1, 65
-; GENERIC-NEXT: mult16 a0, a1
+; GENERIC-NEXT: lsli16 a1, a0, 6
+; GENERIC-NEXT: addu16 a0, a1, a0
; GENERIC-NEXT: addi16 sp, sp, 4
; GENERIC-NEXT: rts16
entry:
define i8 @mul_i8_63(i8 %x) {
; CHECK-LABEL: mul_i8_63:
; CHECK: # %bb.0: # %entry
-; CHECK-NEXT: movi16 a1, 63
-; CHECK-NEXT: mult16 a0, a1
+; CHECK-NEXT: lsli16 a1, a0, 6
+; CHECK-NEXT: subu16 a0, a1, a0
; CHECK-NEXT: rts16
;
; GENERIC-LABEL: mul_i8_63:
; GENERIC-NEXT: .cfi_def_cfa_offset 0
; GENERIC-NEXT: subi16 sp, sp, 4
; GENERIC-NEXT: .cfi_def_cfa_offset 4
-; GENERIC-NEXT: movi16 a1, 63
-; GENERIC-NEXT: mult16 a0, a1
+; GENERIC-NEXT: lsli16 a1, a0, 6
+; GENERIC-NEXT: subu16 a0, a1, a0
; GENERIC-NEXT: addi16 sp, sp, 4
; GENERIC-NEXT: rts16
entry:
define i8 @mul_i8_minus_63(i8 %x) {
; CHECK-LABEL: mul_i8_minus_63:
; CHECK: # %bb.0: # %entry
-; CHECK-NEXT: movih32 a1, 65535
-; CHECK-NEXT: ori32 a1, a1, 65473
-; CHECK-NEXT: mult16 a0, a1
+; CHECK-NEXT: lsli16 a1, a0, 6
+; CHECK-NEXT: subu16 a0, a1
; CHECK-NEXT: rts16
;
; GENERIC-LABEL: mul_i8_minus_63:
; GENERIC-NEXT: .cfi_def_cfa_offset 0
; GENERIC-NEXT: subi16 sp, sp, 4
; GENERIC-NEXT: .cfi_def_cfa_offset 4
-; GENERIC-NEXT: movi16 a1, 255
-; GENERIC-NEXT: lsli16 a2, a1, 24
-; GENERIC-NEXT: lsli16 a3, a1, 16
-; GENERIC-NEXT: or16 a3, a2
-; GENERIC-NEXT: lsli16 a1, a1, 8
-; GENERIC-NEXT: or16 a1, a3
-; GENERIC-NEXT: movi16 a2, 193
-; GENERIC-NEXT: or16 a2, a1
-; GENERIC-NEXT: mult16 a0, a2
+; GENERIC-NEXT: lsli16 a1, a0, 6
+; GENERIC-NEXT: subu16 a0, a0, a1
; GENERIC-NEXT: addi16 sp, sp, 4
; GENERIC-NEXT: rts16
entry:
; GENERIC-NEXT: .cfi_def_cfa_offset 0
; GENERIC-NEXT: subi16 sp, sp, 4
; GENERIC-NEXT: .cfi_def_cfa_offset 4
-; GENERIC-NEXT: movi16 a1, 255
-; GENERIC-NEXT: lsli16 a2, a1, 24
-; GENERIC-NEXT: lsli16 a3, a1, 16
-; GENERIC-NEXT: or16 a3, a2
-; GENERIC-NEXT: movi16 a2, 239
-; GENERIC-NEXT: lsli16 a2, a2, 8
-; GENERIC-NEXT: or16 a2, a3
-; GENERIC-NEXT: or16 a2, a1
-; GENERIC-NEXT: mult16 a0, a2
+; GENERIC-NEXT: lsli16 a1, a0, 12
+; GENERIC-NEXT: addu16 a0, a1, a0
+; GENERIC-NEXT: movi16 a1, 0
+; GENERIC-NEXT: subu16 a0, a1, a0
; GENERIC-NEXT: addi16 sp, sp, 4
; GENERIC-NEXT: rts16
entry:
; GENERIC-NEXT: .cfi_def_cfa_offset 0
; GENERIC-NEXT: subi16 sp, sp, 4
; GENERIC-NEXT: .cfi_def_cfa_offset 4
-; GENERIC-NEXT: movi16 a1, 255
-; GENERIC-NEXT: lsli16 a2, a1, 24
-; GENERIC-NEXT: lsli16 a3, a1, 16
-; GENERIC-NEXT: or16 a3, a2
-; GENERIC-NEXT: movi16 a2, 239
-; GENERIC-NEXT: lsli16 a2, a2, 8
-; GENERIC-NEXT: or16 a2, a3
-; GENERIC-NEXT: or16 a2, a1
-; GENERIC-NEXT: mult16 a0, a2
+; GENERIC-NEXT: lsli16 a1, a0, 12
+; GENERIC-NEXT: addu16 a0, a1, a0
+; GENERIC-NEXT: movi16 a1, 0
+; GENERIC-NEXT: subu16 a0, a1, a0
; GENERIC-NEXT: addi16 sp, sp, 4
; GENERIC-NEXT: rts16
entry:
; GENERIC-NEXT: .cfi_def_cfa_offset 0
; GENERIC-NEXT: subi16 sp, sp, 4
; GENERIC-NEXT: .cfi_def_cfa_offset 4
-; GENERIC-NEXT: movi16 a1, 255
-; GENERIC-NEXT: lsli16 a2, a1, 24
-; GENERIC-NEXT: lsli16 a3, a1, 16
-; GENERIC-NEXT: or16 a3, a2
-; GENERIC-NEXT: lsli16 a1, a1, 8
-; GENERIC-NEXT: or16 a1, a3
-; GENERIC-NEXT: movi16 a2, 191
-; GENERIC-NEXT: or16 a2, a1
-; GENERIC-NEXT: mult16 a0, a2
+; GENERIC-NEXT: lsli16 a1, a0, 6
+; GENERIC-NEXT: addu16 a0, a1, a0
+; GENERIC-NEXT: movi16 a1, 0
+; GENERIC-NEXT: subu16 a0, a1, a0
; GENERIC-NEXT: addi16 sp, sp, 4
; GENERIC-NEXT: rts16
entry: