blob: 2f39ce89ce66efbbb4b8cf8ee10e81ec01cbdd40 [file] [log] [blame]
*** Variables ***
${REPL}= SEPARATOR=
... """ ${\n}
... nvic: IRQControllers.NVIC @ { ${\n}
... sysbus new Bus.BusPointRegistration { address: 0xe000e000; cpu: cpu } ${\n}
... } ${\n}
... ${SPACE*4}-> cpu@0 ${\n}
... ${\n}
... cpu: CPU.CortexM @ sysbus ${\n}
... ${SPACE*4}cpuType: "cortex-m7" ${\n}
... ${SPACE*4}nvic: nvic ${\n}
... """
*** Keywords ***
Create Machine
Execute Command using sysbus
Execute Command mach create
Execute Command machine LoadPlatformDescriptionFromString ${REPL}
Execute Command cpu ExecutionMode SingleStep
Execute Command cpu PC 0x0
Execute Command machine LoadPlatformDescriptionFromString "mem: Memory.MappedMemory @ sysbus 0x0 { size: 0x8000000 }"
*** Test Cases ***
Signed Byte Addition Should Set GE Flag If And Only If The Result Is Greater Or Equal To Zero (sadd8)
${prog}= Catenate SEPARATOR=\n
... movw r0, #0x0000
... movt r0, #0x0000
... movw r1, #0xFFFF
... movt r1, #0xFFFF
... movw r2, #0x0C0A
... movt r2, #0x0C0A
... movw r3, #0xF5F5
... movt r3, #0xF5F5
... sadd8 r2, r2, r3
... sel r4, r1, r0
Create Machine
Execute Command sysbus.cpu AssembleBlock 0 "${prog}"
Execute Command cpu Step 10
${ret}= Execute Command sysbus.cpu GetRegister "R4"
Should Be Equal As Numbers ${ret} 0xFF00FF00
Signed Word Addition Should Set GE Flag If And Only If The Result Is Greater Or Equal To Zero (sadd16)
${prog}= Catenate SEPARATOR=\n
... movw r0, #0x0000
... movt r0, #0x0000
... movw r1, #0xFFFF
... movt r1, #0xFFFF
... movw r2, #0x0A23
... movt r2, #0x0A25
... movw r3, #0xF123
... movt r3, #0xFAA2
... sadd16 r2, r2, r3
... sel r4, r1, r0
Create Machine
Execute Command sysbus.cpu AssembleBlock 0 "${prog}"
Execute Command cpu Step 10
${ret}= Execute Command sysbus.cpu GetRegister "R4"
Should Be Equal As Numbers ${ret} 0xFFFF0000
Signed Byte Subtraction Should Set GE Flag If And Only If The Result Is Greater Or Equal To Zero (ssub8)
${prog}= Catenate SEPARATOR=\n
... movw r0, #0x0000
... movt r0, #0x0000
... movw r1, #0xFFFF
... movt r1, #0xFFFF
... movw r2, #0x0A0C
... movt r2, #0x0A0C
... movw r3, #0x0B0B
... movt r3, #0x0B0B
... ssub8 r2, r2, r3
... sel r4, r1, r0
Create Machine
Execute Command sysbus.cpu AssembleBlock 0 "${prog}"
Execute Command cpu Step 10
${ret}= Execute Command sysbus.cpu GetRegister "R4"
Should Be Equal As Numbers ${ret} 0x00FF00FF
Signed Word Subtraction Should Set GE Flag If And Only If The Result Is Greater Or Equal To Zero (ssub16)
${prog}= Catenate SEPARATOR=\n
... movw r0, #0x0000
... movt r0, #0x0000
... movw r1, #0xFFFF
... movt r1, #0xFFFF
... movw r2, #0x0A25
... movt r2, #0x0A23
... movw r3, #0x0A24
... movt r3, #0x0A24
... ssub16 r2, r2, r3
... sel r4, r1, r0
Create Machine
Execute Command sysbus.cpu AssembleBlock 0 "${prog}"
Execute Command cpu Step 10
${ret}= Execute Command sysbus.cpu GetRegister "R4"
Should Be Equal As Numbers ${ret} 0x0000FFFF
Unsigned Byte Subtraction Should Set GE Flag If And Only If The Result Is Greater Or Equal To Zero (usub8)
${prog}= Catenate SEPARATOR=\n
... movw r0, #0x0000
... movt r0, #0x0000
... movw r1, #0xFFFF
... movt r1, #0xFFFF
... movw r2, #0x0A0C
... movt r2, #0x0C0A
... movw r3, #0x0B0B
... movt r3, #0x0B0B
... ssub8 r2, r2, r3
... sel r4, r1, r0
Create Machine
Execute Command sysbus.cpu AssembleBlock 0 "${prog}"
Execute Command cpu Step 10
${ret}= Execute Command sysbus.cpu GetRegister "R4"
Should Be Equal As Numbers ${ret} 0xFF0000FF
Unsigned Word Subtraction Should Set GE Flag If And Only If The Result Is Greater Or Equal To Zero (usub16)
${prog}= Catenate SEPARATOR=\n
... movw r0, #0x0000
... movt r0, #0x0000
... movw r1, #0xFFFF
... movt r1, #0xFFFF
... movw r2, #0x0A25
... movt r2, #0x0A23
... movw r3, #0x0A24
... movt r3, #0x0A24
... usub16 r2, r2, r3
... sel r4, r1, r0
Create Machine
Execute Command sysbus.cpu AssembleBlock 0 "${prog}"
Execute Command cpu Step 10
${ret}= Execute Command sysbus.cpu GetRegister "R4"
Should Be Equal As Numbers ${ret} 0x0000FFFF