1# mach: frv fr500 fr550 2# sim: --memory-region 0xff000000,4 --memory-region 0xfe000000,00404000 3# xfail: "crashes with bad write" *-* 4 5; Exit with return code 6 7 .macro exit rc 8 setlos.p #1,gr7 9 setlos \rc,gr8 10 tira gr0,#0 11 .endm 12 13; Pass the test case 14 .macro pass 15pass: 16 setlos.p #5,gr10 17 setlos #1,gr8 18 setlos #5,gr7 19 sethi.p %hi(passmsg),gr9 20 setlo %lo(passmsg),gr9 21 tira gr0,#0 22 exit #0 23 .endm 24 25; Fail the testcase 26 .macro fail 27fail\@: 28 setlos.p #5,gr10 29 setlos #1,gr8 30 setlos #5,gr7 31 sethi.p %hi(failmsg),gr9 32 setlo %lo(failmsg),gr9 33 tira gr0,#0 34 exit #1 35 .endm 36 37 .data 38failmsg: 39 .ascii "fail\n" 40passmsg: 41 .ascii "pass\n" 42 43 .text 44 .global _start 45_start: 46 movsg hsr0,gr10 ; enable insn and data caches 47 sethi.p 0xc800,gr11 ; in copy-back mode 48 setlo 0x0000,gr11 49 or gr10,gr11,gr10 50 movgs gr10,hsr0 51 52 sethi.p 0x7,sp 53 setlo 0x0000,sp 54 55 ; fill the cache 56 sethi.p %hi(done1),gr10 57 setlo %lo(done1),gr10 58 movgs gr10,lr 59 setlos.p 0x1000,gr10 60 setlos 0x0,gr11 61 movgs gr10,lcr 62write1: st.p gr11,@(sp,gr11) 63 addi.p gr11,4,gr11 64 bctrlr.p 1,0 65 bra write1 66done1: 67 ; read it back 68 sethi.p %hi(done2),gr10 69 setlo %lo(done2),gr10 70 movgs gr10,lr 71 setlos.p 0x1000,gr10 72 setlos 0x0,gr11 73 movgs gr10,lcr 74read1: ld @(sp,gr11),gr12 75 cmp gr11,gr12,icc0 76 bne icc0,1,fail 77 addi.p gr11,4,gr11 78 bctrlr.p 1,0 79 bra read1 80done2: 81 82 ; fill the cache twice 83 sethi.p %hi(done3),gr10 84 setlo %lo(done3),gr10 85 movgs gr10,lr 86 setlos.p 0x2000,gr10 87 setlos 0x0,gr11 88 movgs gr10,lcr 89write3: st.p gr11,@(sp,gr11) 90 addi.p gr11,4,gr11 91 bctrlr.p 1,0 92 bra write3 93done3: 94 ; read it back 95 sethi.p %hi(done4),gr10 96 setlo %lo(done4),gr10 97 movgs gr10,lr 98 setlos.p 0x2000,gr10 99 setlos 0x0,gr11 100 movgs gr10,lcr 101read4: ld @(sp,gr11),gr12 102 cmp gr11,gr12,icc0 103 bne icc0,1,fail 104 addi.p gr11,4,gr11 105 bctrlr.p 1,0 106 bra read4 107done4: 108 ; read it back in reverse 109 sethi.p %hi(done5),gr10 110 setlo %lo(done5),gr10 111 movgs gr10,lr 112 setlos.p 0x2000,gr10 113 setlos 0x7ffc,gr11 114 movgs gr10,lcr 115read5: ld @(sp,gr11),gr12 116 cmp gr11,gr12,icc0 117 bne icc0,1,fail 118 subi.p gr11,4,gr11 119 bctrlr.p 1,0 120 bra read5 121done5: 122 123 ; access data and insns in non-cache areas 124 sethi.p 0x8038,gr11 ; bctrlr 0,0 125 setlo 0x2000,gr11 126 127 sethi.p 0xff00,gr10 ; documented area 128 setlo 0x0000,gr10 129 sti gr11,@(gr10,0) 130 jmpl @(gr10,gr0) 131 132 ; enable RAM mode 133 movsg hsr0,gr10 134 sethi.p 0x0040,gr12 135 setlo 0x0000,gr12 136 or gr10,gr12,gr10 137 movgs gr10,hsr0 138 139 sethi.p 0xfe00,gr10 ; documented area 140 setlo 0x0400,gr10 141 sti gr11,@(gr10,0) 142 jmpl @(gr10,gr0) 143 144 sethi.p 0xfe40,gr10 ; documented area 145 setlo 0x0400,gr10 146 sti gr11,@(gr10,0) 147 dcf @(gr10,gr0) 148 jmpl @(gr10,gr0) 149 150 sethi.p 0x0007,gr10 ; non RAM area 151 setlo 0x0000,gr10 152 sti gr11,@(gr10,0) 153 jmpl @(gr10,gr0) 154 155 sethi.p 0xfe00,gr10 ; insn RAM area 156 setlo 0x0000,gr10 157 sti gr11,@(gr10,0) 158 jmpl @(gr10,gr0) 159 160 sethi.p 0xfe40,gr10 ; data RAM area 161 setlo 0x0000,gr10 162 sti gr11,@(gr10,0) 163 dcf @(gr10,gr0) 164 jmpl @(gr10,gr0) 165 166 pass 167fail: 168 fail 169