xref: /haiku/src/system/kernel/arch/ppc/arch_cpu_asm.S (revision 4b8d0e68569c871608f13fc5f5f5776a6846a2f2)
12d690920SAxel Dörfler/*
2664683a7SAxel Dörfler * Copyright 2003, Axel Dörfler, axeld@pinc-software.de.
3bdee97bcSAxel Dörfler * Distributed under the terms of the MIT License.
42d690920SAxel Dörfler */
52d690920SAxel Dörfler
62d690920SAxel Dörfler#define FUNCTION(x) .global x; .type x,@function; x
72d690920SAxel Dörfler
82d690920SAxel Dörfler.text
92d690920SAxel Dörfler
102d690920SAxel Dörfler/* uint32 get_sdr1(void);
112d690920SAxel Dörfler */
122d690920SAxel DörflerFUNCTION(get_sdr1):
132d690920SAxel Dörfler	mfsdr1	%r3
142d690920SAxel Dörfler	blr
152d690920SAxel Dörfler
162d690920SAxel Dörfler/* void set_sdr1(uint32 value);
172d690920SAxel Dörfler *				 r3
182d690920SAxel Dörfler */
192d690920SAxel DörflerFUNCTION(set_sdr1):
202d690920SAxel Dörfler	mtsdr1	%r3
212d690920SAxel Dörfler	blr
222d690920SAxel Dörfler
232d690920SAxel Dörfler/* uint32 get_sr(void *virtualAddress);
242d690920SAxel Dörfler *				 r3
252d690920SAxel Dörfler */
262d690920SAxel DörflerFUNCTION(get_sr):
272d690920SAxel Dörfler	mfsrin	%r3, %r3
282d690920SAxel Dörfler	blr
292d690920SAxel Dörfler
302d690920SAxel Dörfler/* void set_sr(void *virtualAddress, uint32 value);
312d690920SAxel Dörfler *			   r3					 r4
322d690920SAxel Dörfler */
332d690920SAxel DörflerFUNCTION(set_sr):
34*4b8d0e68SFrançois Revol	isync
352d690920SAxel Dörfler	mtsrin	%r4, %r3
36*4b8d0e68SFrançois Revol	isync
372d690920SAxel Dörfler	blr
382d690920SAxel Dörfler
392d690920SAxel Dörfler/* uint32 get_msr(void);
402d690920SAxel Dörfler */
412d690920SAxel DörflerFUNCTION(get_msr):
422d690920SAxel Dörfler	mfmsr	%r3
432d690920SAxel Dörfler	blr
442d690920SAxel Dörfler
452d690920SAxel Dörfler/* uint32 set_msr(uint32 value);
462d690920SAxel Dörfler *				  r3
472d690920SAxel Dörfler */
482d690920SAxel DörflerFUNCTION(set_msr):
492d690920SAxel Dörfler	mtmsr	%r3
50*4b8d0e68SFrançois Revol	isync
512d690920SAxel Dörfler	blr
522d690920SAxel Dörfler
53716a16ceSIngo Weinhold/* uint32 get_pvr(void);
54716a16ceSIngo Weinhold */
55716a16ceSIngo WeinholdFUNCTION(get_pvr):
56716a16ceSIngo Weinhold	mfpvr	%r3
57716a16ceSIngo Weinhold	blr
58716a16ceSIngo Weinhold
592d690920SAxel Dörfler
602d690920SAxel Dörfler#define get_ibat(num) \
612d690920SAxel Dörfler	mfibatu	%r4, num; \
622d690920SAxel Dörfler	stw		%r4, 0(%r3); \
632d690920SAxel Dörfler	mfibatl	%r4, num; \
642d690920SAxel Dörfler	stw		%r4, 4(%r3); \
652d690920SAxel Dörfler
662d690920SAxel Dörfler#define set_ibat(num); \
672d690920SAxel Dörfler	lwz		%r4, 0(%r3); \
682d690920SAxel Dörfler	mtibatu num, %r4; \
692d690920SAxel Dörfler	lwz		%r4, 4(%r3); \
702d690920SAxel Dörfler	mtibatl	num, %r4;
712d690920SAxel Dörfler
722d690920SAxel Dörfler/* void get_ibat0-3(block_address_translation *bat);
732d690920SAxel Dörfler *					r3
742d690920SAxel Dörfler */
752d690920SAxel DörflerFUNCTION(get_ibat0):
762d690920SAxel Dörfler	get_ibat(0)
772d690920SAxel Dörfler	blr
782d690920SAxel DörflerFUNCTION(get_ibat1):
792d690920SAxel Dörfler	get_ibat(1)
802d690920SAxel Dörfler	blr
812d690920SAxel DörflerFUNCTION(get_ibat2):
822d690920SAxel Dörfler	get_ibat(2)
832d690920SAxel Dörfler	blr
842d690920SAxel DörflerFUNCTION(get_ibat3):
852d690920SAxel Dörfler	get_ibat(3)
862d690920SAxel Dörfler	blr
872d690920SAxel Dörfler
882d690920SAxel Dörfler/* void set_ibat0-3(block_address_translation *bat);
892d690920SAxel Dörfler *					r3
902d690920SAxel Dörfler */
912d690920SAxel DörflerFUNCTION(set_ibat0):
922d690920SAxel Dörfler	set_ibat(0)
932d690920SAxel Dörfler	blr
942d690920SAxel DörflerFUNCTION(set_ibat1):
952d690920SAxel Dörfler	set_ibat(1)
962d690920SAxel Dörfler	blr
972d690920SAxel DörflerFUNCTION(set_ibat2):
982d690920SAxel Dörfler	set_ibat(2)
992d690920SAxel Dörfler	blr
1002d690920SAxel DörflerFUNCTION(set_ibat3):
1012d690920SAxel Dörfler	set_ibat(3)
1022d690920SAxel Dörfler	blr
1032d690920SAxel Dörfler
1042d690920SAxel Dörfler/* void reset_ibats(void)
1052d690920SAxel Dörfler */
1062d690920SAxel DörflerFUNCTION(reset_ibats):
1072d690920SAxel Dörfler	li		%r3, 0
1082d690920SAxel Dörfler	mtibatu	0, %r3
1092d690920SAxel Dörfler	mtibatl 0, %r3
1102d690920SAxel Dörfler	mtibatu	1, %r3
1112d690920SAxel Dörfler	mtibatl 1, %r3
1122d690920SAxel Dörfler	mtibatu	2, %r3
1132d690920SAxel Dörfler	mtibatl 2, %r3
1142d690920SAxel Dörfler	mtibatu	3, %r3
1152d690920SAxel Dörfler	mtibatl 3, %r3
1162d690920SAxel Dörfler	blr
1172d690920SAxel Dörfler
1182d690920SAxel Dörfler#define get_dbat(num) \
1192d690920SAxel Dörfler	mfdbatu	%r4, num; \
1202d690920SAxel Dörfler	stw		%r4, 0(%r3); \
1212d690920SAxel Dörfler	mfdbatl	%r4, num; \
1222d690920SAxel Dörfler	stw		%r4, 4(%r3);
1232d690920SAxel Dörfler
1242d690920SAxel Dörfler#define set_dbat(num) \
1252d690920SAxel Dörfler	lwz		%r4, 0(%r3); \
1262d690920SAxel Dörfler	mtdbatu num, %r4; \
1272d690920SAxel Dörfler	lwz		%r4, 4(%r3); \
1282d690920SAxel Dörfler	mtdbatl	num, %r4;
1292d690920SAxel Dörfler
1302d690920SAxel Dörfler/* void get_dbat0-3(block_address_translation *bat);
1312d690920SAxel Dörfler *					r3
1322d690920SAxel Dörfler */
1332d690920SAxel DörflerFUNCTION(get_dbat0):
1342d690920SAxel Dörfler	get_dbat(0)
1352d690920SAxel Dörfler	blr
1362d690920SAxel DörflerFUNCTION(get_dbat1):
1372d690920SAxel Dörfler	get_dbat(1)
1382d690920SAxel Dörfler	blr
1392d690920SAxel DörflerFUNCTION(get_dbat2):
1402d690920SAxel Dörfler	get_dbat(2)
1412d690920SAxel Dörfler	blr
1422d690920SAxel DörflerFUNCTION(get_dbat3):
1432d690920SAxel Dörfler	get_dbat(3)
1442d690920SAxel Dörfler	blr
1452d690920SAxel Dörfler
1462d690920SAxel Dörfler/* void set_dbat0-3(block_address_translation *bat);
1472d690920SAxel Dörfler *					r3
1482d690920SAxel Dörfler */
1492d690920SAxel DörflerFUNCTION(set_dbat0):
1502d690920SAxel Dörfler	set_dbat(0)
1512d690920SAxel Dörfler	blr
1522d690920SAxel DörflerFUNCTION(set_dbat1):
1532d690920SAxel Dörfler	set_dbat(1)
1542d690920SAxel Dörfler	blr
1552d690920SAxel DörflerFUNCTION(set_dbat2):
1562d690920SAxel Dörfler	set_dbat(2)
1572d690920SAxel Dörfler	blr
1582d690920SAxel DörflerFUNCTION(set_dbat3):
1592d690920SAxel Dörfler	set_dbat(3)
1602d690920SAxel Dörfler	blr
1612d690920SAxel Dörfler
1622d690920SAxel Dörfler/* void reset_dbats(void)
1632d690920SAxel Dörfler */
1642d690920SAxel DörflerFUNCTION(reset_dbats):
1652d690920SAxel Dörfler	li		%r3, 0
1662d690920SAxel Dörfler	mtdbatu	0, %r3
1672d690920SAxel Dörfler	mtdbatl 0, %r3
1682d690920SAxel Dörfler	mtdbatu	1, %r3
1692d690920SAxel Dörfler	mtdbatl 1, %r3
1702d690920SAxel Dörfler	mtdbatu	2, %r3
1712d690920SAxel Dörfler	mtdbatl 2, %r3
1722d690920SAxel Dörfler	mtdbatu	3, %r3
1732d690920SAxel Dörfler	mtdbatl 3, %r3
1742d690920SAxel Dörfler	blr
1752d690920SAxel Dörfler
17601b20991SAxel Dörfler/* void __eieio(void)
17701b20991SAxel Dörfler */
17801b20991SAxel DörflerFUNCTION(__eieio):
17901b20991SAxel Dörfler	eieio
18001b20991SAxel Dörfler	blr
181