1*** Variables *** 2${riscv_start_pc} 0x2000 3${armv8_start_pc} 0x40000000 4 5*** Keywords *** 6Create RiscV Machine 7 [Arguments] ${bitness} 8 Execute Command using sysbus 9 Execute Command mach create "risc-v" 10 11 Execute Command machine LoadPlatformDescriptionFromString "clint: IRQControllers.CoreLevelInterruptor @ sysbus 0x44000000 { frequency: 66000000 }" 12 Execute Command machine LoadPlatformDescriptionFromString "cpu: CPU.RiscV${bitness} @ sysbus { timeProvider: clint; cpuType: \\"rv${bitness}g\\"; interruptMode: 1 }" 13 Execute Command machine LoadPlatformDescriptionFromString "mem: Memory.MappedMemory @ sysbus 0x1000 { size: 0x40000 }" 14 15 Execute Command cpu PC ${riscv_start_pc} 16 17Write One Plus One Program RiscV32 18 Execute Command sysbus WriteDoubleWord ${riscv_start_pc} 0x00150513 # addi a0, a0, #1 19 Execute Command sysbus WriteDoubleWord ${ ${riscv_start_pc} + 4 } 0x00150513 20 21Write Store Load Program RiscV32 22 # Does not work yet, missing op_qemu_st32 23 # Program: li a0, 0xdead; auipc a1 0x40; sw a0, 0(a1); lw a2, 0(a1) 24 Execute Command sysbus WriteDoubleWord ${riscv_start_pc} 0x0000e537 25 Execute Command sysbus WriteDoubleWord ${ ${riscv_start_pc} + 4 } 0xead50513 26 Execute Command sysbus WriteDoubleWord ${ ${riscv_start_pc} + 8 } 0x00040597 27 Execute Command sysbus WriteDoubleWord ${ ${riscv_start_pc} + 12 } 0x00a5a023 28 Execute Command sysbus WriteDoubleWord ${ ${riscv_start_pc} + 16 } 0x0005a603 29 30Create ARMv8A Machine 31 Execute Command using sysbus 32 Execute Command mach create "armv8" 33 Execute Command machine LoadPlatformDescription @platforms/cpus/cortex-a53-gicv2.repl 34 Execute Command cpu PC ${armv8_start_pc} 35 36Write One Plus One Program ARMv8 37 Execute Command sysbus WriteDoubleWord ${armv8_start_pc} 0x91000400 # add x0, x0, #0x1 38 Execute Command sysbus WriteDoubleWord ${ ${armv8_start_pc} + 4 } 0x91000400 39 40*** Test Cases *** 41Should Calculate One Plus One RiscV32 42 Create RiscV Machine bitness=32 43 Write One Plus One Program RiscV32 44 Execute Command cpu Step 45 Register Should Be Equal 10 0x1 46 Execute Command cpu Step 47 Register Should Be Equal 10 0x2 48 49Should Calculate One Plus One ARMv8 50 Create ARMv8A Machine 51 Write One Plus One Program ARMv8 52 Execute Command cpu Step 53 Register Should Be Equal 0 0x1 54 Execute Command cpu Step 55 Register Should Be Equal 0 0x2 56