1a2e67072SMax Filippov#include "core-isa.h" 2a2e67072SMax Filippov 3c09015ddSAnthony Liguori.macro test_suite name 4c09015ddSAnthony Liguori.data 5c09015ddSAnthony Liguoristatus: .word result 6*6ac269c3SMax Filippovresult: .space 1024 7c09015ddSAnthony Liguori.text 8c09015ddSAnthony Liguori.global main 9c09015ddSAnthony Liguori.align 4 10c09015ddSAnthony Liguorimain: 11c09015ddSAnthony Liguori.endm 12c09015ddSAnthony Liguori 13c09015ddSAnthony Liguori.macro reset_ps 14c09015ddSAnthony Liguori movi a2, 0x4000f 15c09015ddSAnthony Liguori wsr a2, ps 16c09015ddSAnthony Liguori isync 17c09015ddSAnthony Liguori.endm 18c09015ddSAnthony Liguori 19c09015ddSAnthony Liguori.macro test_suite_end 20c09015ddSAnthony Liguori reset_ps 21c09015ddSAnthony Liguori movi a0, status 22c09015ddSAnthony Liguori l32i a2, a0, 0 23c09015ddSAnthony Liguori movi a0, result 24c09015ddSAnthony Liguori sub a2, a2, a0 25c09015ddSAnthony Liguori movi a3, 0 26fafd5533SMax Filippov beqz a2, 2f 27c09015ddSAnthony Liguori1: 28*6ac269c3SMax Filippov l32i a1, a0, 0 29fafd5533SMax Filippov or a3, a3, a1 30*6ac269c3SMax Filippov addi a0, a0, 4 31fafd5533SMax Filippov addi a2, a2, -1 32fafd5533SMax Filippov bnez a2, 1b 33fafd5533SMax Filippov2: 34c09015ddSAnthony Liguori exit 35c09015ddSAnthony Liguori.endm 36c09015ddSAnthony Liguori 377d6b9f0aSMax Filippov.macro print text 387d6b9f0aSMax Filippov.data 397d6b9f0aSMax Filippov97: .ascii "\text\n" 407d6b9f0aSMax Filippov98: 417d6b9f0aSMax Filippov .align 4 427d6b9f0aSMax Filippov.text 437d6b9f0aSMax Filippov movi a2, 4 447d6b9f0aSMax Filippov movi a3, 2 457d6b9f0aSMax Filippov movi a4, 97b 467d6b9f0aSMax Filippov movi a5, 98b 477d6b9f0aSMax Filippov sub a5, a5, a4 487d6b9f0aSMax Filippov simcall 497d6b9f0aSMax Filippov.endm 507d6b9f0aSMax Filippov 51d0fa1f0dSMax Filippov.macro test_init 52d0fa1f0dSMax Filippov.endm 53d0fa1f0dSMax Filippov 54c09015ddSAnthony Liguori.macro test name 550ed040dbSMax Filippov#ifdef DEBUG 560ed040dbSMax Filippov print test_\name 570ed040dbSMax Filippov#endif 58d0fa1f0dSMax Filippov test_init 597d6b9f0aSMax Filippovtest_\name: 607d6b9f0aSMax Filippov.global test_\name 61c09015ddSAnthony Liguori.endm 62c09015ddSAnthony Liguori 63c09015ddSAnthony Liguori.macro test_end 64c09015ddSAnthony Liguori99: 65c09015ddSAnthony Liguori reset_ps 66c09015ddSAnthony Liguori movi a2, status 67c09015ddSAnthony Liguori l32i a3, a2, 0 68*6ac269c3SMax Filippov addi a3, a3, 4 69c09015ddSAnthony Liguori s32i a3, a2, 0 70c09015ddSAnthony Liguori.endm 71c09015ddSAnthony Liguori 72c09015ddSAnthony Liguori.macro exit 73c09015ddSAnthony Liguori movi a2, 1 74c09015ddSAnthony Liguori simcall 75c09015ddSAnthony Liguori.endm 76c09015ddSAnthony Liguori 77c09015ddSAnthony Liguori.macro test_fail 78c09015ddSAnthony Liguori movi a2, status 79c09015ddSAnthony Liguori l32i a2, a2, 0 80c09015ddSAnthony Liguori movi a3, 1 81*6ac269c3SMax Filippov s32i a3, a2, 0 820ed040dbSMax Filippov#ifdef DEBUG 830ed040dbSMax Filippov print failed 840ed040dbSMax Filippov#endif 85c09015ddSAnthony Liguori j 99f 86c09015ddSAnthony Liguori.endm 87c09015ddSAnthony Liguori 88c09015ddSAnthony Liguori.macro assert cond, arg1, arg2 89c09015ddSAnthony Liguori b\cond \arg1, \arg2, 90f 90c09015ddSAnthony Liguori test_fail 91c09015ddSAnthony Liguori90: 92c09015ddSAnthony Liguori nop 93c09015ddSAnthony Liguori.endm 94c09015ddSAnthony Liguori 95c09015ddSAnthony Liguori.macro set_vector vector, addr 96c09015ddSAnthony Liguori movi a2, handler_\vector 97c09015ddSAnthony Liguori movi a3, \addr 98c09015ddSAnthony Liguori s32i a3, a2, 0 99c09015ddSAnthony Liguori.endm 10066c58ba7SMax Filippov 1019d012e8eSMax Filippov.macro dump r 1029d012e8eSMax Filippov#ifdef DEBUG 1039d012e8eSMax Filippov.data 1049d012e8eSMax Filippov.align 4 1059d012e8eSMax Filippov1: .word 0 1069d012e8eSMax Filippov.text 1079d012e8eSMax Filippov movi a4, 1b 1089d012e8eSMax Filippov s32i a2, a4, 0 1099d012e8eSMax Filippov movi a2, 4 1109d012e8eSMax Filippov movi a3, 1 1119d012e8eSMax Filippov movi a5, 4 1129d012e8eSMax Filippov simcall 1139d012e8eSMax Filippov movi a4, 1b 1149d012e8eSMax Filippov l32i a2, a4, 0 1159d012e8eSMax Filippov#endif 1169d012e8eSMax Filippov.endm 1179d012e8eSMax Filippov 11866c58ba7SMax Filippov#define glue(a, b) _glue(a, b) 11966c58ba7SMax Filippov#define _glue(a, b) a ## b 1209c988226SMax Filippov 1219c988226SMax Filippov#define glue3(a, b, c) _glue3(a, b, c) 1229c988226SMax Filippov#define _glue3(a, b, c) a ## b ## c 123