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