1*** Keywords ***
2Prepare Machine
3    Execute Command           using sysbus
4    Execute Command           mach create "ARM"
5
6    Execute Command           machine LoadPlatformDescriptionFromString "rom: Memory.MappedMemory @ sysbus 0x0 { size: 0x1000 }"
7    Execute Command           machine LoadPlatformDescriptionFromString "cpu: CPU.ARMv7A @ sysbus { cpuType: \\"cortex-a9\\" }"
8
9    Execute Command           cpu PC 0x0
10
11Thumb State Should Be Equal
12    [Arguments]  ${state}
13    ${cpsr}=  Execute Command  cpu GetRegister 25
14    ${t}=     Evaluate  bool(${cpsr.strip()} & (1<<5))
15    Should Be Equal As Strings  ${t}  ${state}
16
17Load Program
18    # nop (ARM)
19    Execute Command           sysbus WriteDoubleWord 0x00000000 0xe1a00000
20    # blx 0xc
21    Execute Command           sysbus WriteDoubleWord 0x00000004 0xfa000000
22    # nop (ARM)
23    Execute Command           sysbus WriteDoubleWord 0x00000008 0xe1a00000
24    # 2x nop (Thumb)
25    Execute Command           sysbus WriteDoubleWord 0x0000000c 0x46c046c0
26    # nop; bx lr (Thumb)
27    Execute Command           sysbus WriteDoubleWord 0x00000010 0x477046c0
28
29*** Test Cases ***
30Should Expose Thumb State In CPSR
31    Prepare Machine
32    Load Program
33
34    PC Should Be Equal        0x00000000
35    Thumb State Should Be Equal  False
36
37    Execute Command           cpu Step 1
38    PC Should Be Equal        0x00000004
39    Thumb State Should Be Equal  False
40
41    Execute Command           cpu Step 1
42    PC Should Be Equal        0x0000000c
43    Thumb State Should Be Equal  True
44
45    Execute Command           cpu Step 1
46    PC Should Be Equal        0x0000000e
47    Thumb State Should Be Equal  True
48
49    Execute Command           cpu Step 1
50    PC Should Be Equal        0x00000010
51    Thumb State Should Be Equal  True
52
53    Execute Command           cpu Step 1
54    PC Should Be Equal        0x000000012
55    Thumb State Should Be Equal  True
56
57    Execute Command           cpu Step 1
58    PC Should Be Equal        0x00000008
59    Thumb State Should Be Equal  False
60