136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# RUN: llvm-mc -filetype=obj -triple=mipsel-unknown-nacl %s \ 236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# RUN: | llvm-objdump -triple mipsel -disassemble -no-show-raw-insn - \ 336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# RUN: | FileCheck %s 436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# This test tests that address-masking sandboxing is added when given assembly 636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# input. 736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# Test that address-masking sandboxing is added before indirect branches and 1036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# returns. 1136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 1236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines .align 4 1336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinestest1: 1436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines .set noreorder 1536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 1636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines jr $a0 1736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines nop 1836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines jr $ra 1936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines nop 2036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 2136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-LABEL: test1: 2236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 2336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK: and $4, $4, $14 2436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: jr $4 2536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 2636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# Check that additional nop is inserted, to align mask and jr to the next 2736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# bundle. 2836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 2936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: nop 3036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: nop 3136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 3236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK: and $ra, $ra, $14 3336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: jr $ra 3436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 3536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 3636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 3736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# Test that address-masking sandboxing is added before load instructions. 3836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 3936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines .align 4 4036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinestest2: 4136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines .set noreorder 4236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 4336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines lb $4, 0($1) 4436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines nop 4536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines lbu $4, 0($2) 4636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines lh $4, 0($3) 4736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines lhu $1, 0($4) 4836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines lw $4, 0($5) 4936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines lwc1 $f0, 0($6) 5036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ldc1 $f2, 0($7) 5136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ll $4, 0($8) 5236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines lwl $4, 0($9) 5336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines lwr $4, 0($10) 5436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 5536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines lw $4, 0($sp) 5636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines lw $4, 0($t8) 5736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 5836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-LABEL: test2: 5936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 6036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK: and $1, $1, $15 6136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: lb $4, 0($1) 6236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 6336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# Check that additional nop is inserted, to align mask and load to the next 6436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# bundle. 6536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 6636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK: nop 6736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK: nop 6836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 6936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK: and $2, $2, $15 7036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: lbu $4, 0($2) 7136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 7236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK: and $3, $3, $15 7336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: lh $4, 0($3) 7436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 7536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK: and $4, $4, $15 7636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: lhu $1, 0($4) 7736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 7836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK: and $5, $5, $15 7936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: lw $4, 0($5) 8036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 8136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK: and $6, $6, $15 8236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: lwc1 $f0, 0($6) 8336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 8436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK: and $7, $7, $15 8536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: ldc1 $f2, 0($7) 8636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 8736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK: and $8, $8, $15 8836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: ll $4, 0($8) 8936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 9036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK: and $9, $9, $15 9136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: lwl $4, 0($9) 9236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 9336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK: and $10, $10, $15 9436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: lwr $4, 0($10) 9536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 9636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 9736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# Check that loads where base register is $sp or $t8 (thread pointer register) 9836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# are not masked. 9936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 10036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NOT: and 10136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK: lw $4, 0($sp) 10236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NOT: and 10336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK: lw $4, 0($24) 10436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 10536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 10636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 10736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# Test that address-masking sandboxing is added before store instructions. 10836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 10936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines .align 4 11036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinestest3: 11136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines .set noreorder 11236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 11336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines sb $4, 0($1) 11436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines nop 11536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines sh $4, 0($2) 11636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines sw $4, 0($3) 11736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines swc1 $f0, 0($4) 11836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines sdc1 $f2, 0($5) 11936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines swl $4, 0($6) 12036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines swr $4, 0($7) 12136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines sc $4, 0($8) 12236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 12336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines sw $4, 0($sp) 12436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines sw $4, 0($t8) 12536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 12636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-LABEL: test3: 12736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 12836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK: and $1, $1, $15 12936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: sb $4, 0($1) 13036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 13136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# Check that additional nop is inserted, to align mask and store to the next 13236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# bundle. 13336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 13436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK: nop 13536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK: nop 13636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 13736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK: and $2, $2, $15 13836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: sh $4, 0($2) 13936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 14036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK: and $3, $3, $15 14136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: sw $4, 0($3) 14236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 14336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK: and $4, $4, $15 14436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: swc1 $f0, 0($4) 14536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 14636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK: and $5, $5, $15 14736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: sdc1 $f2, 0($5) 14836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 14936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK: and $6, $6, $15 15036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: swl $4, 0($6) 15136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 15236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK: and $7, $7, $15 15336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: swr $4, 0($7) 15436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 15536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK: and $8, $8, $15 15636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: sc $4, 0($8) 15736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 15836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 15936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# Check that stores where base register is $sp or $t8 (thread pointer register) 16036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# are not masked. 16136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 16236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NOT: and 16336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK: sw $4, 0($sp) 16436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NOT: and 16536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK: sw $4, 0($24) 16636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 16736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 16836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 16936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# Test that address-masking sandboxing is added after instructions that change 17036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# stack pointer. 17136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 17236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines .align 4 17336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinestest4: 17436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines .set noreorder 17536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 17636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines addiu $sp, $sp, 24 17736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines nop 17836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines addu $sp, $sp, $1 17936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines lw $sp, 0($2) 18036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines lw $sp, 123($sp) 18136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines sw $sp, 123($sp) 18236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 18336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-LABEL: test4: 18436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 18536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK: addiu $sp, $sp, 24 18636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: and $sp, $sp, $15 18736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 18836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# Check that additional nop is inserted, to align instruction and mask to the 18936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# next bundle. 19036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 19136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK: nop 19236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK: nop 19336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 19436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK: addu $sp, $sp, $1 19536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: and $sp, $sp, $15 19636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 19736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# Since we next check sandboxing sequence which consists of 3 instructions, 19836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# check that 2 additional nops are inserted, to align it to the next bundle. 19936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 20036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK: nop 20136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK: nop 20236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 20336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 20436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# Check that for instructions that change stack-pointer and load from memory 20536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# masks are added before and after the instruction. 20636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 20736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK: and $2, $2, $15 20836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: lw $sp, 0($2) 20936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: and $sp, $sp, $15 21036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 21136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# For loads where $sp is destination and base, check that mask is added after 21236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# but not before. 21336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 21436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NOT: and 21536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK: lw $sp, 123($sp) 21636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: and $sp, $sp, $15 21736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 21836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# For stores where $sp is destination and base, check that mask is added neither 21936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# before nor after. 22036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 22136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NOT: and 22236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK: sw $sp, 123($sp) 22336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NOT: and 22436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 22536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 22636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 22736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# Test that call + branch delay is aligned at bundle end. Test that mask is 22836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# added before indirect calls. 22936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 23036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines .align 4 23136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinestest5: 23236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines .set noreorder 23336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 23436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines jal func1 23536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines addiu $4, $zero, 1 23636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 23736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines nop 23836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines bal func2 23936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines addiu $4, $zero, 2 24036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 24136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines nop 24236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines nop 24336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines bltzal $t1, func3 24436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines addiu $4, $zero, 3 24536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 24636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines nop 24736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines nop 24836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines nop 24936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines bgezal $t2, func4 25036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines addiu $4, $zero, 4 25136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 25236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines jalr $t9 25336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines addiu $4, $zero, 5 25436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 25536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-LABEL: test5: 25636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 25736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: nop 25836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: nop 25936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: jal 26036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: addiu $4, $zero, 1 26136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 26236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: nop 26336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: nop 26436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: bal 26536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: addiu $4, $zero, 2 26636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 26736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: nop 26836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: nop 26936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: bltzal 27036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: addiu $4, $zero, 3 27136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 27236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: nop 27336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: nop 27436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: nop 27536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: nop 27636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 27736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: nop 27836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: nop 27936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: bgezal 28036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: addiu $4, $zero, 4 28136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 28236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: nop 28336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: and $25, $25, $14 28436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: jalr $25 28536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# CHECK-NEXT: addiu $4, $zero, 5 286cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 287cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 288cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 289cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines# Test that we can put non-dangerous loads and stores in branch delay slot. 290cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 291cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .align 4 292cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hinestest6: 293cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines .set noreorder 294cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 295cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines jal func1 296cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines sw $4, 0($sp) 297cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 298cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines bal func2 299cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines lw $5, 0($t8) 300cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 301cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines jalr $t9 302cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines sw $sp, 0($sp) 303cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 304cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines# CHECK-LABEL: test6: 305cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 306cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines# CHECK-NEXT: nop 307cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines# CHECK-NEXT: nop 308cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines# CHECK-NEXT: jal 309cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines# CHECK-NEXT: sw $4, 0($sp) 310cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 311cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines# CHECK-NEXT: nop 312cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines# CHECK-NEXT: nop 313cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines# CHECK-NEXT: bal 314cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines# CHECK-NEXT: lw $5, 0($24) 315cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 316cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines# CHECK-NEXT: nop 317cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines# CHECK-NEXT: and $25, $25, $14 318cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines# CHECK-NEXT: jalr 319cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines# CHECK-NEXT: sw $sp, 0($sp) 320