| *** 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 |