| @@ -1,14 +1,14 @@ | | | @@ -1,14 +1,14 @@ |
1 | /* $NetBSD: mipsX_subr.S,v 1.93 2016/08/27 07:22:14 skrll Exp $ */ | | 1 | /* $NetBSD: mipsX_subr.S,v 1.94 2016/10/02 09:06:35 maya Exp $ */ |
2 | | | 2 | |
3 | /* | | 3 | /* |
4 | * Copyright 2002 Wasabi Systems, Inc. | | 4 | * Copyright 2002 Wasabi Systems, Inc. |
5 | * All rights reserved. | | 5 | * All rights reserved. |
6 | * | | 6 | * |
7 | * Written by Simon Burge for Wasabi Systems, Inc. | | 7 | * Written by Simon Burge for Wasabi Systems, Inc. |
8 | * | | 8 | * |
9 | * Redistribution and use in source and binary forms, with or without | | 9 | * Redistribution and use in source and binary forms, with or without |
10 | * modification, are permitted provided that the following conditions | | 10 | * modification, are permitted provided that the following conditions |
11 | * are met: | | 11 | * are met: |
12 | * 1. Redistributions of source code must retain the above copyright | | 12 | * 1. Redistributions of source code must retain the above copyright |
13 | * notice, this list of conditions and the following disclaimer. | | 13 | * notice, this list of conditions and the following disclaimer. |
14 | * 2. Redistributions in binary form must reproduce the above copyright | | 14 | * 2. Redistributions in binary form must reproduce the above copyright |
| @@ -377,31 +377,27 @@ VECTOR(MIPSX(tlb_miss), unknown) | | | @@ -377,31 +377,27 @@ VECTOR(MIPSX(tlb_miss), unknown) |
377 | PTR_SRL k1, XSEGSHIFT+XSEGLENGTH+2 #04: clear valid bits | | 377 | PTR_SRL k1, XSEGSHIFT+XSEGLENGTH+2 #04: clear valid bits |
378 | bnez k1, MIPSX(nopagetable) #05: not legal address | | 378 | bnez k1, MIPSX(nopagetable) #05: not legal address |
379 | PTR_SRA k0, XSEGSHIFT - PTR_SCALESHIFT #06: k0=seg offset (almost) | | 379 | PTR_SRA k0, XSEGSHIFT - PTR_SCALESHIFT #06: k0=seg offset (almost) |
380 | bgez k0, 1f #07: k0<0 -> kernel fault | | 380 | bgez k0, 1f #07: k0<0 -> kernel fault |
381 | lui k1, %hi(CPUVAR(PMAP_SEGTAB)) #08: k1=hi of segtab | | 381 | lui k1, %hi(CPUVAR(PMAP_SEGTAB)) #08: k1=hi of segtab |
382 | PTR_ADDI k1, 1 << PTR_SCALESHIFT #09: kernel segtab entry | | 382 | PTR_ADDI k1, 1 << PTR_SCALESHIFT #09: kernel segtab entry |
383 | 1: | | 383 | 1: |
384 | andi k0, (NSEGPG-1)<<PTR_SCALESHIFT #0a: k0=seg offset (mask 0x3) | | 384 | andi k0, (NSEGPG-1)<<PTR_SCALESHIFT #0a: k0=seg offset (mask 0x3) |
385 | PTR_L k1, %lo(CPUVAR(PMAP_SEGTAB))(k1)#0b: k1=segment tab | | 385 | PTR_L k1, %lo(CPUVAR(PMAP_SEGTAB))(k1)#0b: k1=segment tab |
386 | PTR_ADDU k1, k0 #0c: k1=seg entry address | | 386 | PTR_ADDU k1, k0 #0c: k1=seg entry address |
387 | dmfc0 k0, MIPS_COP_0_BAD_VADDR #0d: k0=bad address (again) | | 387 | dmfc0 k0, MIPS_COP_0_BAD_VADDR #0d: k0=bad address (again) |
388 | PTR_L k1, 0(k1) #0e: k1=seg entry | | 388 | PTR_L k1, 0(k1) #0e: k1=seg entry |
389 | b MIPSX(tlb_miss_common) #0f | | 389 | b MIPSX(tlb_miss_common) #0f |
390 | #ifdef MIPSNNR2 | | | |
391 | _EXT k0, k0, SEGSHIFT, SEGLENGTH #10: k0=seg index | | | |
392 | #else | | | |
393 | PTR_SRL k0, SEGSHIFT - PTR_SCALESHIFT #10: k0=seg offset (almost) | | 390 | PTR_SRL k0, SEGSHIFT - PTR_SCALESHIFT #10: k0=seg offset (almost) |
394 | #endif | | | |
395 | #endif /* LP64 */ | | 391 | #endif /* LP64 */ |
396 | 2: /* handle useg addresses */ | | 392 | 2: /* handle useg addresses */ |
397 | lui k1, %hi(CPUVAR(PMAP_SEG0TAB)) #11: k1=hi of seg0tab | | 393 | lui k1, %hi(CPUVAR(PMAP_SEG0TAB)) #11: k1=hi of seg0tab |
398 | dsrl k0, 31 #12: clear low 31 bits | | 394 | dsrl k0, 31 #12: clear low 31 bits |
399 | bnez k0, MIPSX(nopagetable) #13: not legal address | | 395 | bnez k0, MIPSX(nopagetable) #13: not legal address |
400 | PTR_L k1, %lo(CPUVAR(PMAP_SEG0TAB))(k1)#14: k1=segment tab base | | 396 | PTR_L k1, %lo(CPUVAR(PMAP_SEG0TAB))(k1)#14: k1=segment tab base |
401 | dmfc0 k0, MIPS_COP_0_BAD_VADDR #15: k0=bad address (again) | | 397 | dmfc0 k0, MIPS_COP_0_BAD_VADDR #15: k0=bad address (again) |
402 | nop #16 | | 398 | nop #16 |
403 | b MIPSX(tlb_miss_common) #17 | | 399 | b MIPSX(tlb_miss_common) #17 |
404 | PTR_SRL k0, 1*(PGSHIFT-PTR_SCALESHIFT)+(PGSHIFT-2) #18: k0=seg offset (almost) | | 400 | PTR_SRL k0, 1*(PGSHIFT-PTR_SCALESHIFT)+(PGSHIFT-2) #18: k0=seg offset (almost) |
405 | _VECTOR_END(MIPSX(tlb_miss)) | | 401 | _VECTOR_END(MIPSX(tlb_miss)) |
406 | /* dummy xtlb_miss (also a placeholder for tlb_miss_common) */ | | 402 | /* dummy xtlb_miss (also a placeholder for tlb_miss_common) */ |
407 | VECTOR(MIPSX(xtlb_miss), unknown) | | 403 | VECTOR(MIPSX(xtlb_miss), unknown) |