diff options
| -rw-r--r-- | arch/powerpc/mm/hash_low_64.S | 62 |
1 files changed, 35 insertions, 27 deletions
diff --git a/arch/powerpc/mm/hash_low_64.S b/arch/powerpc/mm/hash_low_64.S index 56585086413a..7443481a315c 100644 --- a/arch/powerpc/mm/hash_low_64.S +++ b/arch/powerpc/mm/hash_low_64.S | |||
| @@ -115,11 +115,13 @@ END_MMU_FTR_SECTION_IFSET(MMU_FTR_1T_SEGMENT) | |||
| 115 | sldi r29,r5,SID_SHIFT - VPN_SHIFT | 115 | sldi r29,r5,SID_SHIFT - VPN_SHIFT |
| 116 | rldicl r28,r3,64 - VPN_SHIFT,64 - (SID_SHIFT - VPN_SHIFT) | 116 | rldicl r28,r3,64 - VPN_SHIFT,64 - (SID_SHIFT - VPN_SHIFT) |
| 117 | or r29,r28,r29 | 117 | or r29,r28,r29 |
| 118 | 118 | /* | |
| 119 | /* Calculate hash value for primary slot and store it in r28 */ | 119 | * Calculate hash value for primary slot and store it in r28 |
| 120 | rldicl r5,r5,0,25 /* vsid & 0x0000007fffffffff */ | 120 | * r3 = va, r5 = vsid |
| 121 | rldicl r0,r3,64-12,48 /* (ea >> 12) & 0xffff */ | 121 | * r0 = (va >> 12) & ((1ul << (28 - 12)) -1) |
| 122 | xor r28,r5,r0 | 122 | */ |
| 123 | rldicl r0,r3,64-12,48 | ||
| 124 | xor r28,r5,r0 /* hash */ | ||
| 123 | b 4f | 125 | b 4f |
| 124 | 126 | ||
| 125 | 3: /* Calc vpn and put it in r29 */ | 127 | 3: /* Calc vpn and put it in r29 */ |
| @@ -130,11 +132,12 @@ END_MMU_FTR_SECTION_IFSET(MMU_FTR_1T_SEGMENT) | |||
| 130 | /* | 132 | /* |
| 131 | * calculate hash value for primary slot and | 133 | * calculate hash value for primary slot and |
| 132 | * store it in r28 for 1T segment | 134 | * store it in r28 for 1T segment |
| 135 | * r3 = va, r5 = vsid | ||
| 133 | */ | 136 | */ |
| 134 | rldic r28,r5,25,25 /* (vsid << 25) & 0x7fffffffff */ | 137 | sldi r28,r5,25 /* vsid << 25 */ |
| 135 | clrldi r5,r5,40 /* vsid & 0xffffff */ | 138 | /* r0 = (va >> 12) & ((1ul << (40 - 12)) -1) */ |
| 136 | rldicl r0,r3,64-12,36 /* (ea >> 12) & 0xfffffff */ | 139 | rldicl r0,r3,64-12,36 |
| 137 | xor r28,r28,r5 | 140 | xor r28,r28,r5 /* vsid ^ ( vsid << 25) */ |
| 138 | xor r28,r28,r0 /* hash */ | 141 | xor r28,r28,r0 /* hash */ |
| 139 | 142 | ||
| 140 | /* Convert linux PTE bits into HW equivalents */ | 143 | /* Convert linux PTE bits into HW equivalents */ |
| @@ -407,11 +410,13 @@ END_MMU_FTR_SECTION_IFSET(MMU_FTR_1T_SEGMENT) | |||
| 407 | */ | 410 | */ |
| 408 | rldicl r28,r3,64 - VPN_SHIFT,64 - (SID_SHIFT - VPN_SHIFT) | 411 | rldicl r28,r3,64 - VPN_SHIFT,64 - (SID_SHIFT - VPN_SHIFT) |
| 409 | or r29,r28,r29 | 412 | or r29,r28,r29 |
| 410 | 413 | /* | |
| 411 | /* Calculate hash value for primary slot and store it in r28 */ | 414 | * Calculate hash value for primary slot and store it in r28 |
| 412 | rldicl r5,r5,0,25 /* vsid & 0x0000007fffffffff */ | 415 | * r3 = va, r5 = vsid |
| 413 | rldicl r0,r3,64-12,48 /* (ea >> 12) & 0xffff */ | 416 | * r0 = (va >> 12) & ((1ul << (28 - 12)) -1) |
| 414 | xor r28,r5,r0 | 417 | */ |
| 418 | rldicl r0,r3,64-12,48 | ||
| 419 | xor r28,r5,r0 /* hash */ | ||
| 415 | b 4f | 420 | b 4f |
| 416 | 421 | ||
| 417 | 3: /* Calc vpn and put it in r29 */ | 422 | 3: /* Calc vpn and put it in r29 */ |
| @@ -426,11 +431,12 @@ END_MMU_FTR_SECTION_IFSET(MMU_FTR_1T_SEGMENT) | |||
| 426 | /* | 431 | /* |
| 427 | * Calculate hash value for primary slot and | 432 | * Calculate hash value for primary slot and |
| 428 | * store it in r28 for 1T segment | 433 | * store it in r28 for 1T segment |
| 434 | * r3 = va, r5 = vsid | ||
| 429 | */ | 435 | */ |
| 430 | rldic r28,r5,25,25 /* (vsid << 25) & 0x7fffffffff */ | 436 | sldi r28,r5,25 /* vsid << 25 */ |
| 431 | clrldi r5,r5,40 /* vsid & 0xffffff */ | 437 | /* r0 = (va >> 12) & ((1ul << (40 - 12)) -1) */ |
| 432 | rldicl r0,r3,64-12,36 /* (ea >> 12) & 0xfffffff */ | 438 | rldicl r0,r3,64-12,36 |
| 433 | xor r28,r28,r5 | 439 | xor r28,r28,r5 /* vsid ^ ( vsid << 25) */ |
| 434 | xor r28,r28,r0 /* hash */ | 440 | xor r28,r28,r0 /* hash */ |
| 435 | 441 | ||
| 436 | /* Convert linux PTE bits into HW equivalents */ | 442 | /* Convert linux PTE bits into HW equivalents */ |
| @@ -752,25 +758,27 @@ END_MMU_FTR_SECTION_IFSET(MMU_FTR_1T_SEGMENT) | |||
| 752 | rldicl r28,r3,64 - VPN_SHIFT,64 - (SID_SHIFT - VPN_SHIFT) | 758 | rldicl r28,r3,64 - VPN_SHIFT,64 - (SID_SHIFT - VPN_SHIFT) |
| 753 | or r29,r28,r29 | 759 | or r29,r28,r29 |
| 754 | 760 | ||
| 755 | /* Calculate hash value for primary slot and store it in r28 */ | 761 | /* Calculate hash value for primary slot and store it in r28 |
| 756 | rldicl r5,r5,0,25 /* vsid & 0x0000007fffffffff */ | 762 | * r3 = va, r5 = vsid |
| 757 | rldicl r0,r3,64-16,52 /* (ea >> 16) & 0xfff */ | 763 | * r0 = (va >> 16) & ((1ul << (28 - 16)) -1) |
| 758 | xor r28,r5,r0 | 764 | */ |
| 765 | rldicl r0,r3,64-16,52 | ||
| 766 | xor r28,r5,r0 /* hash */ | ||
| 759 | b 4f | 767 | b 4f |
| 760 | 768 | ||
| 761 | 3: /* Calc vpn and put it in r29 */ | 769 | 3: /* Calc vpn and put it in r29 */ |
| 762 | sldi r29,r5,SID_SHIFT_1T - VPN_SHIFT | 770 | sldi r29,r5,SID_SHIFT_1T - VPN_SHIFT |
| 763 | rldicl r28,r3,64 - VPN_SHIFT,64 - (SID_SHIFT_1T - VPN_SHIFT) | 771 | rldicl r28,r3,64 - VPN_SHIFT,64 - (SID_SHIFT_1T - VPN_SHIFT) |
| 764 | or r29,r28,r29 | 772 | or r29,r28,r29 |
| 765 | |||
| 766 | /* | 773 | /* |
| 767 | * calculate hash value for primary slot and | 774 | * calculate hash value for primary slot and |
| 768 | * store it in r28 for 1T segment | 775 | * store it in r28 for 1T segment |
| 776 | * r3 = va, r5 = vsid | ||
| 769 | */ | 777 | */ |
| 770 | rldic r28,r5,25,25 /* (vsid << 25) & 0x7fffffffff */ | 778 | sldi r28,r5,25 /* vsid << 25 */ |
| 771 | clrldi r5,r5,40 /* vsid & 0xffffff */ | 779 | /* r0 = (va >> 16) & ((1ul << (40 - 16)) -1) */ |
| 772 | rldicl r0,r3,64-16,40 /* (ea >> 16) & 0xffffff */ | 780 | rldicl r0,r3,64-16,40 |
| 773 | xor r28,r28,r5 | 781 | xor r28,r28,r5 /* vsid ^ ( vsid << 25) */ |
| 774 | xor r28,r28,r0 /* hash */ | 782 | xor r28,r28,r0 /* hash */ |
| 775 | 783 | ||
| 776 | /* Convert linux PTE bits into HW equivalents */ | 784 | /* Convert linux PTE bits into HW equivalents */ |
