Home | History | Annotate | Download | only in arm32
      1 ; Show that we can translate IR instruction "trap".
      2 
      3 ; REQUIRES: allow_dump
      4 
      5 ; Compile using standalone assembler.
      6 ; RUN: %p2i --filetype=asm -i %s --target=arm32 --args -Om1 \
      7 ; RUN:   | FileCheck %s --check-prefix=ASM
      8 
      9 ; Show bytes in assembled standalone code.
     10 ; RUN: %p2i --filetype=asm -i %s --target=arm32 --assemble --disassemble \
     11 ; RUN:   --args -Om1 \
     12 ; RUN:   | FileCheck %s --check-prefix=DIS
     13 
     14 ; Compile using integrated assembler.
     15 ; RUN: %p2i --filetype=iasm -i %s --target=arm32 --args -Om1 \
     16 ; RUN:   | FileCheck %s --check-prefix=IASM
     17 
     18 ; Show bytes in assembled integrated code.
     19 ; RUN: %p2i --filetype=iasm -i %s --target=arm32 --assemble --disassemble \
     20 ; RUN:   --args -Om1 \
     21 ; RUN:   | FileCheck %s --check-prefix=DIS
     22 
     23 ; testUnreachable generates a trap for the unreachable instruction.
     24 
     25 define internal void @testUnreachable() {
     26 ; ASM-LABEL: testUnreachable:
     27 ; DIS-LABEL: 00000000 <testUnreachable>:
     28 
     29   unreachable
     30 
     31 ; ASM:  .long 0xe7fedef0
     32 ; DIS-NEXT:    0:       e7fedef0
     33 ; IASM-NOT:     .long 0xe7fedef0
     34 }
     35 
     36 ; testTrap uses integer division to test this, since a trap is
     37 ; inserted if one divides by zero.
     38 
     39 define internal i32 @testTrap(i32 %v1, i32 %v2) {
     40 ; ASM-LABEL: testTrap:
     41 ; DIS-LABEL: 00000010 <testTrap>:
     42 ; IASM-LABEL: testTrap:
     43 
     44   %res = udiv i32 %v1, %v2
     45 
     46 ; ASM:          bne
     47 ; DIS:  28:     1a000000
     48 ; IASM-NOT:     bne
     49 
     50 ; ASM-NEXT:     .long 0xe7fedef0
     51 ; DIS-NEXT:  2c:        e7fedef0
     52 ; IASM-NOT:     .long 0xe7fedef0
     53 
     54   ret i32 %res
     55 }
     56