]> git.lizzy.rs Git - plan9front.git/blobdiff - sys/src/9/bcm64/l.s
bcm64: use exclusive monitor on nrdy to wake up idlehands()
[plan9front.git] / sys / src / 9 / bcm64 / l.s
index fb5f35fa30e5f641c7b6a276ace2a1c19e11ffa0..69e9c3924ec7cab57d4333f1c31a194e86fe0e10 100644 (file)
@@ -291,6 +291,17 @@ TEXT splx(SB), 1, $-4
        MSR     R0, DAIF
        RETURN
 
+TEXT idlehands(SB), 1, $-4
+       DMB     $ISH
+       MOV     $nrdy(SB), R1
+       LDXRW   (R1), R0
+       CBZ     R0, _goodnight
+       CLREX
+       SEVL
+_goodnight:
+       WFE
+       RETURN
+
 TEXT cycles(SB), 1, $-4
 TEXT lcycles(SB), 1, $-4
        MRS     PMCCNTR_EL0, R0
@@ -326,17 +337,6 @@ TEXT setttbr(SB), 1, $-4
 
        B       cacheiinv(SB)
 
-TEXT magic(SB), 1, $-4
-       DSB     $SY
-       ISB     $SY
-       DSB     $SY
-       ISB     $SY
-       DSB     $SY
-       ISB     $SY
-       DSB     $SY
-       ISB     $SY
-       RETURN
-
 /*
  * TLB maintenance operations.
  * these broadcast to all cpu's in the cluser
@@ -413,10 +413,8 @@ TEXT vsys0(SB), 1, $-4
        CMPW    $0x15, R17      // SVC trap?
        BNE     _itsatrap       // nope.
 
-       MOV     R26, 224(RSP)   // special
-       MOV     R27, 232(RSP)   // special
-       MOV     R28, 240(RSP)   // sb
-       MOV     R29, 248(RSP)   // special
+       MOVP    R26, R27, 224(RSP)
+       MOVP    R28, R29, 240(RSP)
 
        MRS     SP_EL0, R1
        MRS     ELR_EL1, R2
@@ -448,10 +446,8 @@ TEXT forkret(SB), 1, $-4
        MSR     R2, ELR_EL1
        MSR     R3, SPSR_EL1
 
-       MOV     224(RSP), R26   // special
-       MOV     232(RSP), R27   // special
-       MOV     240(RSP), R28   // sb
-       MOV     248(RSP), R29   // special
+       MOVP    224(RSP), R26, R27
+       MOVP    240(RSP), R28, R29
 
        MOV     256(RSP), R30   // link
 
@@ -460,38 +456,24 @@ TEXT forkret(SB), 1, $-4
 
 TEXT itsatrap<>(SB), 1, $-4
 _itsatrap:
-       MOV     R1, 24(RSP)
-       MOV     R2, 32(RSP)
-       MOV     R3, 40(RSP)
-       MOV     R4, 48(RSP)
-       MOV     R5, 56(RSP)
-       MOV     R6, 64(RSP)
-       MOV     R7, 72(RSP)
-       MOV     R8, 80(RSP)
-       MOV     R9, 88(RSP)
-       MOV     R10, 96(RSP)
-       MOV     R11, 104(RSP)
-       MOV     R12, 112(RSP)
-       MOV     R13, 120(RSP)
-       MOV     R14, 128(RSP)
-       MOV     R15, 136(RSP)
-       MOV     R16, 144(RSP)
-
-       MOV     R18, 160(RSP)
-       MOV     R19, 168(RSP)
-       MOV     R20, 176(RSP)
-       MOV     R21, 184(RSP)
-       MOV     R22, 192(RSP)
-       MOV     R23, 200(RSP)
-       MOV     R24, 208(RSP)
-       MOV     R25, 216(RSP)
+       MOVP    R1, R2, 24(RSP)
+       MOVP    R3, R4, 40(RSP)
+       MOVP    R5, R6, 56(RSP)
+       MOVP    R7, R8, 72(RSP)
+       MOVP    R9, R10, 88(RSP)
+       MOVP    R11, R12, 104(RSP)
+       MOVP    R13, R14, 120(RSP)
+       MOVP    R15, R16, 136(RSP)
+
+       MOVP    R18, R19, 160(RSP)
+       MOVP    R20, R21, 176(RSP)
+       MOVP    R22, R23, 192(RSP)
+       MOVP    R24, R25, 208(RSP)
 
 // trap/irq/fiq/serr from EL0
 TEXT vtrap0(SB), 1, $-4
-       MOV     R26, 224(RSP)   // special
-       MOV     R27, 232(RSP)   // special
-       MOV     R28, 240(RSP)   // sb
-       MOV     R29, 248(RSP)   // special
+       MOVP    R26, R27, 224(RSP)
+       MOVP    R28, R29, 240(RSP)
 
        MRS     SP_EL0, R1
        MRS     ELR_EL1, R2
@@ -522,38 +504,23 @@ TEXT noteret(SB), 1, $-4
        MSR     R2, ELR_EL1
        MSR     R3, SPSR_EL1
 
-       MOV     224(RSP), R26   // special
-       MOV     232(RSP), R27   // special
-       MOV     240(RSP), R28   // sb
-       MOV     248(RSP), R29   // special
+       MOVP    224(RSP), R26, R27
+       MOVP    240(RSP), R28, R29
 
 _intrreturn:
-       MOV     16(RSP), R0
-       MOV     24(RSP), R1
-       MOV     32(RSP), R2
-       MOV     40(RSP), R3
-       MOV     48(RSP), R4
-       MOV     56(RSP), R5
-       MOV     64(RSP), R6
-       MOV     72(RSP), R7
-       MOV     80(RSP), R8
-       MOV     88(RSP), R9
-       MOV     96(RSP), R10
-       MOV     104(RSP), R11
-       MOV     112(RSP), R12
-       MOV     120(RSP), R13
-       MOV     128(RSP), R14
-       MOV     136(RSP), R15
-       MOV     144(RSP), R16
-       MOV     152(RSP), R17
-       MOV     160(RSP), R18
-       MOV     168(RSP), R19
-       MOV     176(RSP), R20
-       MOV     184(RSP), R21
-       MOV     192(RSP), R22
-       MOV     200(RSP), R23
-       MOV     208(RSP), R24
-       MOV     216(RSP), R25
+       MOVP    16(RSP), R0, R1
+       MOVP    32(RSP), R2, R3
+       MOVP    48(RSP), R4, R5
+       MOVP    64(RSP), R6, R7
+       MOVP    80(RSP), R8, R9
+       MOVP    96(RSP), R10, R11
+       MOVP    112(RSP), R12, R13
+       MOVP    128(RSP), R14, R15
+       MOVP    144(RSP), R16, R17
+       MOVP    160(RSP), R18, R19
+       MOVP    176(RSP), R20, R21
+       MOVP    192(RSP), R22, R23
+       MOVP    208(RSP), R24, R25
 
        MOV     256(RSP), R30   // link
 
@@ -604,32 +571,19 @@ _vsyspatch:
 TEXT vtrap(SB), 1, $-4
        SUB     $TRAPFRAMESIZE, RSP
 
-       MOV     R0, 16(RSP)
-       MOV     R1, 24(RSP)
-       MOV     R2, 32(RSP)
-       MOV     R3, 40(RSP)
-       MOV     R4, 48(RSP)
-       MOV     R5, 56(RSP)
-       MOV     R6, 64(RSP)
-       MOV     R7, 72(RSP)
-       MOV     R8, 80(RSP)
-       MOV     R9, 88(RSP)
-       MOV     R10, 96(RSP)
-       MOV     R11, 104(RSP)
-       MOV     R12, 112(RSP)
-       MOV     R13, 120(RSP)
-       MOV     R14, 128(RSP)
-       MOV     R15, 136(RSP)
-       MOV     R16, 144(RSP)
-       MOV     R17, 152(RSP)
-       MOV     R18, 160(RSP)
-       MOV     R19, 168(RSP)
-       MOV     R20, 176(RSP)
-       MOV     R21, 184(RSP)
-       MOV     R22, 192(RSP)
-       MOV     R23, 200(RSP)
-       MOV     R24, 208(RSP)
-       MOV     R25, 216(RSP)
+       MOVP    R0, R1, 16(RSP)
+       MOVP    R2, R3, 32(RSP)
+       MOVP    R4, R5, 48(RSP)
+       MOVP    R6, R7, 64(RSP)
+       MOVP    R8, R9, 80(RSP)
+       MOVP    R10, R11, 96(RSP)
+       MOVP    R12, R13, 112(RSP)
+       MOVP    R14, R15, 128(RSP)
+       MOVP    R16, R17, 144(RSP)
+       MOVP    R18, R19, 160(RSP)
+       MOVP    R20, R21, 176(RSP)
+       MOVP    R22, R23, 192(RSP)
+       MOVP    R24, R25, 208(RSP)
 
        MOV     R30, 256(RSP)   // link
 
@@ -641,32 +595,19 @@ _vtrappatch:
 TEXT virq(SB), 1, $-4
        SUB     $TRAPFRAMESIZE, RSP
 
-       MOV     R0, 16(RSP)
-       MOV     R1, 24(RSP)
-       MOV     R2, 32(RSP)
-       MOV     R3, 40(RSP)
-       MOV     R4, 48(RSP)
-       MOV     R5, 56(RSP)
-       MOV     R6, 64(RSP)
-       MOV     R7, 72(RSP)
-       MOV     R8, 80(RSP)
-       MOV     R9, 88(RSP)
-       MOV     R10, 96(RSP)
-       MOV     R11, 104(RSP)
-       MOV     R12, 112(RSP)
-       MOV     R13, 120(RSP)
-       MOV     R14, 128(RSP)
-       MOV     R15, 136(RSP)
-       MOV     R16, 144(RSP)
-       MOV     R17, 152(RSP)
-       MOV     R18, 160(RSP)
-       MOV     R19, 168(RSP)
-       MOV     R20, 176(RSP)
-       MOV     R21, 184(RSP)
-       MOV     R22, 192(RSP)
-       MOV     R23, 200(RSP)
-       MOV     R24, 208(RSP)
-       MOV     R25, 216(RSP)
+       MOVP    R0, R1, 16(RSP)
+       MOVP    R2, R3, 32(RSP)
+       MOVP    R4, R5, 48(RSP)
+       MOVP    R6, R7, 64(RSP)
+       MOVP    R8, R9, 80(RSP)
+       MOVP    R10, R11, 96(RSP)
+       MOVP    R12, R13, 112(RSP)
+       MOVP    R14, R15, 128(RSP)
+       MOVP    R16, R17, 144(RSP)
+       MOVP    R18, R19, 160(RSP)
+       MOVP    R20, R21, 176(RSP)
+       MOVP    R22, R23, 192(RSP)
+       MOVP    R24, R25, 208(RSP)
 
        MOV     R30, 256(RSP)   // link
 
@@ -678,32 +619,19 @@ _virqpatch:
 TEXT vfiq(SB), 1, $-4
        SUB     $TRAPFRAMESIZE, RSP
 
-       MOV     R0, 16(RSP)
-       MOV     R1, 24(RSP)
-       MOV     R2, 32(RSP)
-       MOV     R3, 40(RSP)
-       MOV     R4, 48(RSP)
-       MOV     R5, 56(RSP)
-       MOV     R6, 64(RSP)
-       MOV     R7, 72(RSP)
-       MOV     R8, 80(RSP)
-       MOV     R9, 88(RSP)
-       MOV     R10, 96(RSP)
-       MOV     R11, 104(RSP)
-       MOV     R12, 112(RSP)
-       MOV     R13, 120(RSP)
-       MOV     R14, 128(RSP)
-       MOV     R15, 136(RSP)
-       MOV     R16, 144(RSP)
-       MOV     R17, 152(RSP)
-       MOV     R18, 160(RSP)
-       MOV     R19, 168(RSP)
-       MOV     R20, 176(RSP)
-       MOV     R21, 184(RSP)
-       MOV     R22, 192(RSP)
-       MOV     R23, 200(RSP)
-       MOV     R24, 208(RSP)
-       MOV     R25, 216(RSP)
+       MOVP    R0, R1, 16(RSP)
+       MOVP    R2, R3, 32(RSP)
+       MOVP    R4, R5, 48(RSP)
+       MOVP    R6, R7, 64(RSP)
+       MOVP    R8, R9, 80(RSP)
+       MOVP    R10, R11, 96(RSP)
+       MOVP    R12, R13, 112(RSP)
+       MOVP    R14, R15, 128(RSP)
+       MOVP    R16, R17, 144(RSP)
+       MOVP    R18, R19, 160(RSP)
+       MOVP    R20, R21, 176(RSP)
+       MOVP    R22, R23, 192(RSP)
+       MOVP    R24, R25, 208(RSP)
 
        MOV     R30, 256(RSP)   // link
        MOV     $(2<<32), R0    // type fiq
@@ -714,32 +642,19 @@ _vfiqpatch:
 TEXT vserr(SB), 1, $-4
        SUB     $TRAPFRAMESIZE, RSP
 
-       MOV     R0, 16(RSP)
-       MOV     R1, 24(RSP)
-       MOV     R2, 32(RSP)
-       MOV     R3, 40(RSP)
-       MOV     R4, 48(RSP)
-       MOV     R5, 56(RSP)
-       MOV     R6, 64(RSP)
-       MOV     R7, 72(RSP)
-       MOV     R8, 80(RSP)
-       MOV     R9, 88(RSP)
-       MOV     R10, 96(RSP)
-       MOV     R11, 104(RSP)
-       MOV     R12, 112(RSP)
-       MOV     R13, 120(RSP)
-       MOV     R14, 128(RSP)
-       MOV     R15, 136(RSP)
-       MOV     R16, 144(RSP)
-       MOV     R17, 152(RSP)
-       MOV     R18, 160(RSP)
-       MOV     R19, 168(RSP)
-       MOV     R20, 176(RSP)
-       MOV     R21, 184(RSP)
-       MOV     R22, 192(RSP)
-       MOV     R23, 200(RSP)
-       MOV     R24, 208(RSP)
-       MOV     R25, 216(RSP)
+       MOVP    R0, R1, 16(RSP)
+       MOVP    R2, R3, 32(RSP)
+       MOVP    R4, R5, 48(RSP)
+       MOVP    R6, R7, 64(RSP)
+       MOVP    R8, R9, 80(RSP)
+       MOVP    R10, R11, 96(RSP)
+       MOVP    R12, R13, 112(RSP)
+       MOVP    R14, R15, 128(RSP)
+       MOVP    R16, R17, 144(RSP)
+       MOVP    R18, R19, 160(RSP)
+       MOVP    R20, R21, 176(RSP)
+       MOVP    R22, R23, 192(RSP)
+       MOVP    R24, R25, 208(RSP)
 
        MOV     R30, 256(RSP)   // link