tests/misc: Add a test for correct CTR and LR updating by branches
authorPaul Mackerras <paulus@ozlabs.org>
Tue, 24 Nov 2020 01:00:48 +0000 (12:00 +1100)
committerPaul Mackerras <paulus@ozlabs.org>
Tue, 24 Nov 2020 01:00:48 +0000 (12:00 +1100)
This adds a test with a bdnzl followed immediately by a bdnz, to check
that CTR and LR both get evaluated and written back correctly in this
situation.

Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
tests/misc/head.S
tests/misc/misc.c
tests/test_misc.bin
tests/test_misc.console_out

index b0acb7f4013d267cfb8cd444b70ff926fd77b832..d490a6187fc73a8c10530110603c64abedb76d46 100644 (file)
@@ -137,3 +137,28 @@ test_mtpvr:
     mtlr %r0
 
     blr
+
+/* Test that bdnz and bdnzl update CTR and LR correctly */
+       .global test_bdnzl
+test_bdnzl:
+       mflr    %r10
+       mfcr    %r11
+       li      %r0,0xf8
+       mtctr   %r0
+       lis     %r0,0x2000
+       mtcr    %r0
+       addpcis %r9,0
+1:     bdnztl  27,3f
+2:     bdnzt   14,4f
+3:     nop
+4:     li      %r3,1
+       addi    %r9,%r9,2b-1b
+       mflr    %r8
+       cmpd    %r8,%r9
+       bne     9f
+       mfctr   %r7
+       cmpdi   %r7,0xf6
+       bne     9f
+       li      %r3,0
+9:     mtlr    %r10
+       blr
index 283ca7fc131ccdd6f5f3cb87b18372fb7497386b..73745d94a510863e99cc049d6b7ad388ded025fb 100644 (file)
@@ -14,6 +14,7 @@ extern long test_addpcis_1(void);
 extern long test_addpcis_2(void);
 extern long test_mfpvr(void);
 extern long test_mtpvr(void);
+extern long test_bdnzl(void);
 
 // i < 100
 void print_test_number(int i)
@@ -58,5 +59,12 @@ int main(void)
        } else
                puts(PASS);
 
+       print_test_number(5);
+       if (test_bdnzl() != 0) {
+               fail = 1;
+               puts(FAIL);
+       } else
+               puts(PASS);
+
        return fail;
 }
index 7e68e1cca7d67ba1d7e134d6bb8dd93a9c3640fe..2264686c06a630733a71d56de90ea1a1f3925baf 100755 (executable)
Binary files a/tests/test_misc.bin and b/tests/test_misc.bin differ
index 2ff5a99ff8f81db744530aa5d1908f3151ad7a8f..e59c03fe1e46b3a5496cc4949fdbfac9ae10ab77 100644 (file)
@@ -2,3 +2,4 @@ Test 01:PASS
 Test 02:PASS\r
 Test 03:PASS\r
 Test 04:PASS\r
+Test 05:PASS\r