9os

Experimental kernel using plan9 ideas for embedded device
git clone git://git.simple-cc.org/9os
Log | Files | Refs | README | LICENSE

arch.s (3568B)


      1 	.FILE	"arch.s"
      2 
      3 	.TEXT
      4 	.GLOBL	interrupt
      5 interrupt:
      6 	CBNZ	X0,1f
      7 	MSR	DAIFSET,#15
      8 	RET
      9 1:
     10 	MSR	DAIFCLR,#15
     11 	RET
     12 
     13 	.TEXT
     14 	.GLOBL	barrier
     15 barrier:
     16 	ADR	X1,1f
     17 	LSL	X0,X0,#3
     18 	ADD	X1,X1,X0
     19 	BR	X1
     20 
     21 1:
     22 	ISB
     23 	RET
     24 
     25 	DSB	SY
     26 	RET
     27 
     28 	.TEXT
     29 	.GLOBL	invalltlb
     30 invalltlb:
     31 	TLBI	VMALLE1IS
     32 	DSB	ISH
     33 	ISB
     34 	RET
     35 
     36 	.TEXT
     37 	.GLOBL	invtlb
     38 invtlb:
     39 	LSR	X9,X0,#12
     40 	DSB	ISHST
     41 	TLBI	VAE1,X9
     42 	DSB	ISH
     43 	RET
     44 
     45 	.TEXT
     46 	.GLOBL	invdcachesetway
     47 invdcachesetway:
     48 	DC	ISW,X0
     49 	RET
     50 
     51 	.TEXT
     52 	.GLOBL	inm8
     53 inm8:
     54 	LDRB	W0,[X0]
     55 	RET
     56 
     57 	.TEXT
     58 	.GLOBL	inm16
     59 inm16:
     60 	LDRH	W0,[X0]
     61 	RET
     62 
     63 	.TEXT
     64 	.GLOBL	inm32
     65 inm32:
     66 	LDR	W0,[X0]
     67 	RET
     68 
     69 	.TEXT
     70 	.GLOBL	outm8
     71 outm8:
     72 	STRB	W0,[X1]
     73 	RET
     74 
     75 	.TEXT
     76 	.GLOBL	outm16
     77 outm16:
     78 	STRH	W0,[X1]
     79 	RET
     80 
     81 	.TEXT
     82 	.GLOBL	outm32
     83 outm32:
     84 	STR     W0,[X1]
     85 	RET
     86 
     87 	.TEXT
     88 	.GLOBL	halt
     89 halt:
     90 	MSR	DAIFSET,#15
     91 	WFE
     92 	B	halt
     93 
     94 	.TEXT
     95 	.GLOBL	getctx
     96 getctx:
     97 	STP	X0,X1,[X0,#16*0]
     98 	STP	X2,X3,[X0,#16*1]
     99 	STP	X4,X5,[X0,#16*2]
    100 	STP	X6,X7,[X0,#16*3]
    101 	STP	X8,X9,[X0,#16*4]
    102 	STP	X10,X11,[X0,#16*5]
    103 	STP	X12,X13,[X0,#16*6]
    104 	STP	X14,X15,[X0,#16*7]
    105 	STP	X16,X17,[X0,#16*8]
    106 	STP	X18,X19,[X0,#16*9]
    107 	STP	X20,X21,[X0,#16*10]
    108 	STP	X22,X23,[X0,#16*11]
    109 	STP	X24,X25,[X0,#16*12]
    110 	STP	X26,X27,[X0,#16*13]
    111 	STP	X28,X29,[X0,#16*14]
    112 
    113 	MRS	X9,ELR_EL1
    114 	STP	X9,X30,[X0,#16*15]
    115 
    116 	MRS	X9,SPSR_EL1
    117 	MRS	X10,ESR_EL1
    118 	STP	X9,X10,[X0,#16*16]
    119 
    120 	MRS	X9,SP_EL0
    121 	MOV	X10,SP
    122 	STP	X9,X10,[x0,#16*17]
    123 
    124 	MRS	X9,FAR_EL1
    125 	STP	X9,XZR,[x0,#16*18]
    126 
    127 	MRS	X9,TTBR0_EL1
    128 	MRS	X10,TTBR1_EL1
    129 	STP	X9,X10,[x0,#16*19]
    130 
    131 	RET
    132 
    133 	.TEXT
    134 EXCEPTION:
    135 	STP	X0,X1,[SP,#-16*(20-0)]
    136 	STP	X2,X3,[SP,#-16*(20-1)]
    137 	STP	X4,X5,[SP,#-16*(20-2)]
    138 	STP	X6,X7,[SP,#-16*(20-3)]
    139 	STP	X8,X9,[SP,#-16*(20-4)]
    140 	STP	X10,X11,[SP,#-16*(20-5)]
    141 	STP	X12,X13,[SP,#-16*(20-6)]
    142 	STP	X14,X15,[SP,#-16*(20-7)]
    143 	STP	X16,X17,[SP,#-16*(20-8)]
    144 	STP	X18,X19,[SP,#-16*(20-9)]
    145 	STP	X20,X21,[SP,#-16*(20-10)]
    146 	STP	X22,X23,[SP,#-16*(20-11)]
    147 	STP	X24,X25,[SP,#-16*(20-12)]
    148 	STP	X26,X27,[SP,#-16*(20-13)]
    149 	STP	X28,X29,[SP,#-16*(20-14)]
    150 
    151 	MRS	X9,ELR_EL1
    152 	STP	X9,X30,[SP,#-16*(20-15)]
    153 
    154 	MRS	X9,SPSR_EL1
    155 	MRS	X10,ESR_EL1
    156 	STP	X9,X10,[SP,#-16*(20-16)]
    157 
    158 	MRS	X9,SP_EL0
    159 	MOV	X10,SP
    160 	STP	X9,X10,[SP,#-16*(20-17)]
    161 
    162 	MRS	X9,FAR_EL1
    163 	STP	X9,XZR,[SP,#-16*(20-18)]
    164 
    165 	MRS	X9,TTBR0_EL1
    166 	MRS	X10,TTBR1_EL1
    167 	STP	X9,X10,[SP,#-16*(20-19)]
    168 
    169 	SUB	SP,SP,#16*20
    170 	MOV	X0,SP
    171 	MOV	X29,#0
    172 	BL	trap
    173 	ADR	X0,OUTSYN
    174 	B	panic
    175 
    176 	.DATA
    177 OUTSYN:
    178 	.ASCIZ	"out of sync"
    179 
    180 	.TEXT
    181 	.GLOBL	swtch
    182 swtch:
    183 	LDP	X9,X10,[X0,#16*19]
    184 	MSR	TTBR0_EL1,X9
    185 	MSR	TTBR1_EL1,X10
    186 
    187 	LDP	X9,XZR,[X0,#16*18]
    188 	MSR	FAR_EL1,X10
    189 
    190 	LDP	X9,X10,[X0,#16*17]
    191 	MSR	SP_EL0,X9
    192 	MOV	SP,X10
    193 
    194 	LDP	X9,X10,[X0,#16*16]
    195 	MSR	ESR_EL1,X10
    196 	MSR	SPSR_EL1,X9
    197 
    198 	LDP	X9,X30,[X0,#16*15]
    199 	MSR	ELR_EL1,X9
    200 
    201 	LDP	X28,X29,[X0,#16*14]
    202 	LDP	X26,X27,[X0,#16*13]
    203 	LDP	X24,X25,[X0,#16*12]
    204 	LDP	X22,X23,[X0,#16*11]
    205 	LDP	X20,X21,[X0,#16*10]
    206 	LDP	X18,X19,[X0,#16*9]
    207 	LDP	X16,X17,[X0,#16*8]
    208 	LDP	X14,X15,[X0,#16*7]
    209 	LDP	X12,X13,[X0,#16*6]
    210 	LDP	X10,X11,[X0,#16*5]
    211 	LDP	X8,X9,[X0,#16*4]
    212 	LDP	X6,X7,[X0,#16*3]
    213 	LDP	X4,X5,[X0,#16*2]
    214 	LDP	X2,X3,[X0,#16*1]
    215 	LDP	X0,X1,[X0,#16*0]
    216 
    217 	ERET
    218 
    219 	.ALIGN	11
    220 	.GLOBL	vectbl
    221 vectbl:
    222 // CURRENT EL WITH SP0
    223 	B	EXCEPTION	// SYNc
    224 	.ALIGN	7
    225 	B	EXCEPTION	// IRQ
    226 	.ALIGN	7
    227 	B	EXCEPTION	// FIQ
    228 	.ALIGN	7
    229 	B	EXCEPTION	// SERROR
    230 
    231 // CURRENT EL WITH SPX
    232 	.ALIGN	7
    233 	B	EXCEPTION	// SYNC
    234 	.ALIGN	7
    235 	B	EXCEPTION	// IRQ
    236 	.ALIGN	7
    237 	B	EXCEPTION	// FIQ
    238 	.ALIGN	7
    239 	B	EXCEPTION	// SERROR
    240 
    241 // LOWER EL USING AARCH64
    242 	.ALIGN	7
    243 	B	EXCEPTION	// SYNC
    244 	.ALIGN	7
    245 	B	EXCEPTION	// IRQ
    246 	.ALIGN	7
    247 	B	EXCEPTION	// FIQ
    248 	.ALIGN	7
    249 	B	EXCEPTION	// SERROR
    250 
    251 // LOWER EL USING AARCH32
    252 	.ALIGN	7
    253 	B	EXCEPTION	// SYNC
    254 	.ALIGN	7
    255 	B	EXCEPTION	// IRQ
    256 	.ALIGN	7
    257 	B	EXCEPTION	// FIQ
    258 	.ALIGN	7
    259 	B	EXCEPTION	// SERROR