150 lines · plain
1# RUN: llvm-mc %s -triple=mipsel-unknown-linux -show-encoding -mcpu=mips32r2 | FileCheck %s2# Check that the assembler can handle the documented syntax3# for arithmetic and logical instructions.4#------------------------------------------------------------------------------5# Logical instructions6#------------------------------------------------------------------------------7# CHECK: and $9, $6, $7 # encoding: [0x24,0x48,0xc7,0x00]8# CHECK: andi $9, $6, 17767 # encoding: [0x67,0x45,0xc9,0x30]9# CHECK: andi $9, $6, 17767 # encoding: [0x67,0x45,0xc9,0x30]10# CHECK: andi $9, $9, 17767 # encoding: [0x67,0x45,0x29,0x31]11# CHECK: clo $6, $7 # encoding: [0x21,0x30,0xe6,0x70]12# CHECK: clz $6, $7 # encoding: [0x20,0x30,0xe6,0x70]13# CHECK: ins $19, $9, 6, 7 # encoding: [0x84,0x61,0x33,0x7d]14# CHECK: nor $9, $6, $7 # encoding: [0x27,0x48,0xc7,0x00]15# CHECK: or $3, $3, $5 # encoding: [0x25,0x18,0x65,0x00]16# CHECK: ori $4, $5, 17767 # encoding: [0x67,0x45,0xa4,0x34]17# CHECK: ori $9, $6, 17767 # encoding: [0x67,0x45,0xc9,0x34]18# CHECK: ori $11, $11, 128 # encoding: [0x80,0x00,0x6b,0x35]19# CHECK: rotr $9, $6, 7 # encoding: [0xc2,0x49,0x26,0x00]20# CHECK: rotrv $9, $6, $7 # encoding: [0x46,0x48,0xe6,0x00]21# CHECK: sll $4, $3, 7 # encoding: [0xc0,0x21,0x03,0x00]22# CHECK: sllv $2, $3, $5 # encoding: [0x04,0x10,0xa3,0x00]23# CHECK: slt $3, $3, $5 # encoding: [0x2a,0x18,0x65,0x00]24# CHECK: slti $3, $3, 103 # encoding: [0x67,0x00,0x63,0x28]25# CHECK: slti $3, $3, 103 # encoding: [0x67,0x00,0x63,0x28]26# CHECK: sltiu $3, $3, 103 # encoding: [0x67,0x00,0x63,0x2c]27# CHECK: sltu $3, $3, $5 # encoding: [0x2b,0x18,0x65,0x00]28# CHECK: sra $4, $3, 7 # encoding: [0xc3,0x21,0x03,0x00]29# CHECK: srav $2, $3, $5 # encoding: [0x07,0x10,0xa3,0x00]30# CHECK: srl $4, $3, 7 # encoding: [0xc2,0x21,0x03,0x00]31# CHECK: srlv $2, $3, $5 # encoding: [0x06,0x10,0xa3,0x00]32# CHECK: xor $3, $3, $5 # encoding: [0x26,0x18,0x65,0x00]33# CHECK: xori $9, $6, 17767 # encoding: [0x67,0x45,0xc9,0x38]34# CHECK: xori $9, $6, 17767 # encoding: [0x67,0x45,0xc9,0x38]35# CHECK: xori $11, $11, 12 # encoding: [0x0c,0x00,0x6b,0x39]36# CHECK: wsbh $6, $7 # encoding: [0xa0,0x30,0x07,0x7c]37# CHECK: not $7, $8 # encoding: [0x27,0x38,0x00,0x01]38 and $9, $6, $739 and $9, $6, 1776740 andi $9, $6, 1776741 andi $9, 1776742 clo $6, $743 clz $6, $744 ins $19, $9, 6,745 nor $9, $6, $746 or $3, $3, $547 or $4, $5, 1776748 ori $9, $6, 1776749 ori $11, 12850 rotr $9, $6, 751 rotrv $9, $6, $752 sll $4, $3, 753 sllv $2, $3, $554 slt $3, $3, $555 slt $3, $3, 10356 slti $3, $3, 10357 sltiu $3, $3, 10358 sltu $3, $3, $559 sra $4, $3, 760 srav $2, $3, $561 srl $4, $3, 762 srlv $2, $3, $563 xor $3, $3, $564 xor $9, $6, 1776765 xori $9, $6, 1776766 xori $11, 1267 wsbh $6, $768 not $7 ,$869 70#------------------------------------------------------------------------------71# Arithmetic instructions72#------------------------------------------------------------------------------73 74# CHECK: add $9, $6, $7 # encoding: [0x20,0x48,0xc7,0x00]75# CHECK: addi $9, $6, 17767 # encoding: [0x67,0x45,0xc9,0x20]76# CHECK: addiu $9, $6, -15001 # encoding: [0x67,0xc5,0xc9,0x24]77# CHECK: addi $9, $6, 17767 # encoding: [0x67,0x45,0xc9,0x20]78# CHECK: addi $9, $9, 17767 # encoding: [0x67,0x45,0x29,0x21]79# CHECK: addiu $9, $6, -15001 # encoding: [0x67,0xc5,0xc9,0x24]80# CHECK: addiu $11, $11, 40 # encoding: [0x28,0x00,0x6b,0x25]81# CHECK: addu $9, $6, $7 # encoding: [0x21,0x48,0xc7,0x00]82# CHECK: madd $6, $7 # encoding: [0x00,0x00,0xc7,0x70]83# CHECK: maddu $6, $7 # encoding: [0x01,0x00,0xc7,0x70]84# CHECK: msub $6, $7 # encoding: [0x04,0x00,0xc7,0x70]85# CHECK: msubu $6, $7 # encoding: [0x05,0x00,0xc7,0x70]86# CHECK: mult $3, $5 # encoding: [0x18,0x00,0x65,0x00]87# CHECK: multu $3, $5 # encoding: [0x19,0x00,0x65,0x00]88# CHECK: sub $9, $6, $7 # encoding: [0x22,0x48,0xc7,0x00]89# CHECK: addi $sp, $sp, -56 # encoding: [0xc8,0xff,0xbd,0x23]90# CHECK: subu $4, $3, $5 # encoding: [0x23,0x20,0x65,0x00]91# CHECK: addiu $sp, $sp, -40 # encoding: [0xd8,0xff,0xbd,0x27]92# CHECK: neg $6, $7 # encoding: [0x22,0x30,0x07,0x00]93# CHECK: negu $6, $7 # encoding: [0x23,0x30,0x07,0x00]94# CHECK: move $7, $8 # encoding: [0x25,0x38,0x00,0x01]95# CHECK: .set push96# CHECK: .set mips32r297# CHECK: rdhwr $5, $2998# CHECK: .set pop # encoding: [0x3b,0xe8,0x05,0x7c]99 add $9,$6,$7100 add $9,$6,17767101 addu $9,$6,-15001102 addi $9,$6,17767103 addi $9,17767104 addiu $9,$6,-15001105 addiu $11,40106 addu $9,$6,$7107 madd $6,$7108 maddu $6,$7109 msub $6,$7110 msubu $6,$7111 mult $3,$5112 multu $3,$5113 sub $9,$6,$7114 sub $sp,$sp,56115 subu $4,$3,$5116 subu $sp,$sp,40117 neg $6,$7118 negu $6,$7119 move $7,$8120 rdhwr $5, $29121 122#------------------------------------------------------------------------------123# Shortcuts for arithmetic instructions124#------------------------------------------------------------------------------125 126# CHECK: add $9, $9, $3 # encoding: [0x20,0x48,0x23,0x01]127# CHECK: addu $9, $9, $3 # encoding: [0x21,0x48,0x23,0x01]128# CHECK: addi $9, $9, 10 # encoding: [0x0a,0x00,0x29,0x21]129# CHECK: addiu $9, $9, 10 # encoding: [0x0a,0x00,0x29,0x25]130# CHECK: and $5, $5, $6 # encoding: [0x24,0x28,0xa6,0x00]131# CHECK: mul $9, $9, $3 # encoding: [0x02,0x48,0x23,0x71]132# CHECK: or $2, $2, $4 # encoding: [0x25,0x10,0x44,0x00]133# CHECK: sub $9, $9, $3 # encoding: [0x22,0x48,0x23,0x01]134# CHECK: subu $9, $9, $3 # encoding: [0x23,0x48,0x23,0x01]135# CHECK: addi $9, $9, -10 # encoding: [0xf6,0xff,0x29,0x21]136# CHECK: addiu $9, $9, -10 # encoding: [0xf6,0xff,0x29,0x25]137# CHECK: xor $9, $9, $10 # encoding: [0x26,0x48,0x2a,0x01]138 add $9, $3139 addu $9, $3140 add $9, 10141 addu $9, 10142 and $5, $6143 mul $9, $3144 or $2, $4145 sub $9, $3146 subu $9, $3147 sub $9, 10148 subu $9, 10149 xor $9, $10150