245 lines · plain
1; RUN: llc -mcpu=mips32r2 -mtriple=mipsel -relocation-model=static -o - %s | FileCheck %s2 3define void @isr_sw0() #0 {4; CHECK-LABEL: isr_sw0:5; CHECK: mfc0 $27, $14, 06; CHECK: sw $27, [[R1:[0-9]+]]($sp)7; CHECK: mfc0 $27, $12, 08; CHECK: sw $27, [[R2:[0-9]+]]($sp)9; CHECK: ins $27, $zero, 8, 110; CHECK: ins $27, $zero, 1, 411; CHECK: ins $27, $zero, 29, 112; CHECK: mtc0 $27, $12, 013 ; Must save all registers14; CHECK: sw $7, {{[0-9]+}}($sp)15; CHECK: sw $6, {{[0-9]+}}($sp)16; CHECK: sw $5, {{[0-9]+}}($sp)17; CHECK: sw $4, {{[0-9]+}}($sp)18; CHECK: sw $3, {{[0-9]+}}($sp)19; CHECK: sw $2, {{[0-9]+}}($sp)20; CHECK: sw $25, {{[0-9]+}}($sp)21; CHECK: sw $24, {{[0-9]+}}($sp)22; CHECK: sw $15, {{[0-9]+}}($sp)23; CHECK: sw $14, {{[0-9]+}}($sp)24; CHECK: sw $13, {{[0-9]+}}($sp)25; CHECK: sw $12, {{[0-9]+}}($sp)26; CHECK: sw $11, {{[0-9]+}}($sp)27; CHECK: sw $10, {{[0-9]+}}($sp)28; CHECK: sw $9, {{[0-9]+}}($sp)29; CHECK: sw $8, {{[0-9]+}}($sp)30; CHECK: sw $ra, [[R5:[0-9]+]]($sp)31; CHECK: sw $gp, {{[0-9]+}}($sp)32; CHECK: sw $1, {{[0-9]+}}($sp)33; CHECK: mflo $2634; CHECK: sw $26, [[R3:[0-9]+]]($sp)35; CHECK: mfhi $2636; CHECK: sw $26, [[R4:[0-9]+]]($sp)37 call void @write()38; CHECK: lw $26, [[R4:[0-9]+]]($sp)39; CHECK: mthi $2640; CHECK: lw $26, [[R3:[0-9]+]]($sp)41; CHECK: mtlo $2642; CHECK: lw $1, {{[0-9]+}}($sp)43; CHECK: lw $gp, {{[0-9]+}}($sp)44; CHECK: lw $ra, [[R5:[0-9]+]]($sp)45; CHECK: lw $8, {{[0-9]+}}($sp)46; CHECK: lw $9, {{[0-9]+}}($sp)47; CHECK: lw $10, {{[0-9]+}}($sp)48; CHECK: lw $11, {{[0-9]+}}($sp)49; CHECK: lw $12, {{[0-9]+}}($sp)50; CHECK: lw $13, {{[0-9]+}}($sp)51; CHECK: lw $14, {{[0-9]+}}($sp)52; CHECK: lw $15, {{[0-9]+}}($sp)53; CHECK: lw $24, {{[0-9]+}}($sp)54; CHECK: lw $25, {{[0-9]+}}($sp)55; CHECK: lw $2, {{[0-9]+}}($sp)56; CHECK: lw $3, {{[0-9]+}}($sp)57; CHECK: lw $4, {{[0-9]+}}($sp)58; CHECK: lw $5, {{[0-9]+}}($sp)59; CHECK: lw $6, {{[0-9]+}}($sp)60; CHECK: lw $7, {{[0-9]+}}($sp)61; CHECK: di62; CHECK: ehb63; CHECK: lw $27, [[R2:[0-9]+]]($sp)64; CHECK: mtc0 $27, $14, 065; CHECK: lw $27, [[R1:[0-9]+]]($sp)66; CHECK: mtc0 $27, $12, 067; CHECK: eret68 ret void69}70 71declare void @write(...)72 73define void @isr_sw1() #2 {74; CHECK-LABEL: isr_sw1:75; CHECK: mfc0 $27, $14, 076; CHECK: sw $27, {{[0-9]+}}($sp)77; CHECK: mfc0 $27, $12, 078; CHECK: sw $27, {{[0-9]+}}($sp)79; CHECK: ins $27, $zero, 8, 280; CHECK: ins $27, $zero, 1, 481; CHECK: ins $27, $zero, 29, 182; CHECK: mtc0 $27, $12, 083 ret void84; CHECK: di85; CHECK: ehb86; CHECK: lw $27, {{[0-9]+}}($sp)87; CHECK: mtc0 $27, $14, 088; CHECK: lw $27, {{[0-9]+}}($sp)89; CHECK: mtc0 $27, $12, 090; CHECK: eret91 }92 93define void @isr_hw0() #3 {94; CHECK-LABEL: isr_hw0:95; CHECK: mfc0 $27, $14, 096; CHECK: sw $27, {{[0-9]+}}($sp)97; CHECK: mfc0 $27, $12, 098; CHECK: sw $27, {{[0-9]+}}($sp)99; CHECK: ins $27, $zero, 8, 3100; CHECK: ins $27, $zero, 1, 4101; CHECK: ins $27, $zero, 29, 1102; CHECK: mtc0 $27, $12, 0103 ret void104; CHECK: di105; CHECK: ehb106; CHECK: lw $27, {{[0-9]+}}($sp)107; CHECK: mtc0 $27, $14, 0108; CHECK: lw $27, {{[0-9]+}}($sp)109; CHECK: mtc0 $27, $12, 0110; CHECK: eret111 }112 113define void @isr_hw1() #4 {114; CHECK-LABEL: isr_hw1:115; CHECK: mfc0 $27, $14, 0116; CHECK: sw $27, {{[0-9]+}}($sp)117; CHECK: mfc0 $27, $12, 0118; CHECK: sw $27, {{[0-9]+}}($sp)119; CHECK: ins $27, $zero, 8, 4120; CHECK: ins $27, $zero, 1, 4121; CHECK: ins $27, $zero, 29, 1122; CHECK: mtc0 $27, $12, 0123 ret void124; CHECK: di125; CHECK: ehb126; CHECK: lw $27, {{[0-9]+}}($sp)127; CHECK: mtc0 $27, $14, 0128; CHECK: lw $27, {{[0-9]+}}($sp)129; CHECK: mtc0 $27, $12, 0130; CHECK: eret131 }132 133 134define void @isr_hw2() #5 {135; CHECK-LABEL: isr_hw2:136; CHECK: mfc0 $27, $14, 0137; CHECK: sw $27, {{[0-9]+}}($sp)138; CHECK: mfc0 $27, $12, 0139; CHECK: sw $27, {{[0-9]+}}($sp)140; CHECK: ins $27, $zero, 8, 5141; CHECK: ins $27, $zero, 1, 4142; CHECK: ins $27, $zero, 29, 1143; CHECK: mtc0 $27, $12, 0144 ret void145; CHECK: di146; CHECK: ehb147; CHECK: lw $27, {{[0-9]+}}($sp)148; CHECK: mtc0 $27, $14, 0149; CHECK: lw $27, {{[0-9]+}}($sp)150; CHECK: mtc0 $27, $12, 0151; CHECK: eret152 }153 154define void @isr_hw3() #6 {155; CHECK-LABEL: isr_hw3:156; CHECK: mfc0 $27, $14, 0157; CHECK: sw $27, {{[0-9]+}}($sp)158; CHECK: mfc0 $27, $12, 0159; CHECK: sw $27, {{[0-9]+}}($sp)160; CHECK: ins $27, $zero, 8, 6161; CHECK: ins $27, $zero, 1, 4162; CHECK: ins $27, $zero, 29, 1163; CHECK: mtc0 $27, $12, 0164 ret void165; CHECK: di166; CHECK: ehb167; CHECK: lw $27, {{[0-9]+}}($sp)168; CHECK: mtc0 $27, $14, 0169; CHECK: lw $27, {{[0-9]+}}($sp)170; CHECK: mtc0 $27, $12, 0171; CHECK: eret172 }173 174define void @isr_hw4() #7 {175; CHECK-LABEL: isr_hw4:176; CHECK: mfc0 $27, $14, 0177; CHECK: sw $27, {{[0-9]+}}($sp)178; CHECK: mfc0 $27, $12, 0179; CHECK: sw $27, {{[0-9]+}}($sp)180; CHECK: ins $27, $zero, 8, 7181; CHECK: ins $27, $zero, 1, 4182; CHECK: ins $27, $zero, 29, 1183; CHECK: mtc0 $27, $12, 0184 ret void185; CHECK: di186; CHECK: ehb187; CHECK: lw $27, {{[0-9]+}}($sp)188; CHECK: mtc0 $27, $14, 0189; CHECK: lw $27, {{[0-9]+}}($sp)190; CHECK: mtc0 $27, $12, 0191; CHECK: eret192 }193 194define void @isr_hw5() #8 {195; CHECK-LABEL: isr_hw5:196; CHECK: mfc0 $27, $14, 0197; CHECK: sw $27, {{[0-9]+}}($sp)198; CHECK: mfc0 $27, $12, 0199; CHECK: sw $27, {{[0-9]+}}($sp)200; CHECK: ins $27, $zero, 8, 8201; CHECK: ins $27, $zero, 1, 4202; CHECK: ins $27, $zero, 29, 1203; CHECK: mtc0 $27, $12, 0204 ret void205; CHECK: di206; CHECK: ehb207; CHECK: lw $27, {{[0-9]+}}($sp)208; CHECK: mtc0 $27, $14, 0209; CHECK: lw $27, {{[0-9]+}}($sp)210; CHECK: mtc0 $27, $12, 0211; CHECK: eret212 }213 214define void @isr_eic() #9 {215; CHECK-LABEL: isr_eic:216; CHECK: mfc0 $26, $13, 0217; CHECK: ext $26, $26, 10, 6218; CHECK: mfc0 $27, $14, 0219; CHECK: sw $27, {{[0-9]+}}($sp)220; CHECK: mfc0 $27, $12, 0221; CHECK: sw $27, {{[0-9]+}}($sp)222; CHECK: ins $27, $26, 10, 6223; CHECK: ins $27, $zero, 1, 4224; CHECK: ins $27, $zero, 29, 1225; CHECK: mtc0 $27, $12, 0226 ret void227; CHECK: di228; CHECK: ehb229; CHECK: lw $27, {{[0-9]+}}($sp)230; CHECK: mtc0 $27, $14, 0231; CHECK: lw $27, {{[0-9]+}}($sp)232; CHECK: mtc0 $27, $12, 0233; CHECK: eret234 }235 236attributes #0 = { "interrupt"="sw0" }237attributes #2 = { "interrupt"="sw1" }238attributes #3 = { "interrupt"="hw0" }239attributes #4 = { "interrupt"="hw1" }240attributes #5 = { "interrupt"="hw2" }241attributes #6 = { "interrupt"="hw3" }242attributes #7 = { "interrupt"="hw4" }243attributes #8 = { "interrupt"="hw5" }244attributes #9 = { "interrupt"="eic" }245