diff options
| -rw-r--r-- | arch/parisc/kernel/entry.S | 2 | ||||
| -rw-r--r-- | include/asm-parisc/assembly.h | 40 |
2 files changed, 36 insertions, 6 deletions
diff --git a/arch/parisc/kernel/entry.S b/arch/parisc/kernel/entry.S index 0ca49710d95e..166df5bab769 100644 --- a/arch/parisc/kernel/entry.S +++ b/arch/parisc/kernel/entry.S | |||
| @@ -863,6 +863,7 @@ __execve: | |||
| 863 | _switch_to: | 863 | _switch_to: |
| 864 | STREG %r2, -RP_OFFSET(%r30) | 864 | STREG %r2, -RP_OFFSET(%r30) |
| 865 | 865 | ||
| 866 | callee_save_float | ||
| 866 | callee_save | 867 | callee_save |
| 867 | 868 | ||
| 868 | load32 _switch_to_ret, %r2 | 869 | load32 _switch_to_ret, %r2 |
| @@ -879,6 +880,7 @@ _switch_to: | |||
| 879 | _switch_to_ret: | 880 | _switch_to_ret: |
| 880 | mtctl %r0, %cr0 /* Needed for single stepping */ | 881 | mtctl %r0, %cr0 /* Needed for single stepping */ |
| 881 | callee_rest | 882 | callee_rest |
| 883 | callee_rest_float | ||
| 882 | 884 | ||
| 883 | LDREG -RP_OFFSET(%r30), %r2 | 885 | LDREG -RP_OFFSET(%r30), %r2 |
| 884 | bv %r0(%r2) | 886 | bv %r0(%r2) |
diff --git a/include/asm-parisc/assembly.h b/include/asm-parisc/assembly.h index b24a99e3ef9c..fb8bc7c16e0e 100644 --- a/include/asm-parisc/assembly.h +++ b/include/asm-parisc/assembly.h | |||
| @@ -21,6 +21,7 @@ | |||
| 21 | #ifndef _PARISC_ASSEMBLY_H | 21 | #ifndef _PARISC_ASSEMBLY_H |
| 22 | #define _PARISC_ASSEMBLY_H | 22 | #define _PARISC_ASSEMBLY_H |
| 23 | 23 | ||
| 24 | #define CALLEE_FLOAT_FRAME_SIZE 80 | ||
| 24 | #ifdef __LP64__ | 25 | #ifdef __LP64__ |
| 25 | #define LDREG ldd | 26 | #define LDREG ldd |
| 26 | #define STREG std | 27 | #define STREG std |
| @@ -30,7 +31,7 @@ | |||
| 30 | #define SHRREG shrd | 31 | #define SHRREG shrd |
| 31 | #define RP_OFFSET 16 | 32 | #define RP_OFFSET 16 |
| 32 | #define FRAME_SIZE 128 | 33 | #define FRAME_SIZE 128 |
| 33 | #define CALLEE_SAVE_FRAME_SIZE 144 | 34 | #define CALLEE_REG_FRAME_SIZE 144 |
| 34 | #else | 35 | #else |
| 35 | #define LDREG ldw | 36 | #define LDREG ldw |
| 36 | #define STREG stw | 37 | #define STREG stw |
| @@ -40,8 +41,9 @@ | |||
| 40 | #define SHRREG shr | 41 | #define SHRREG shr |
| 41 | #define RP_OFFSET 20 | 42 | #define RP_OFFSET 20 |
| 42 | #define FRAME_SIZE 64 | 43 | #define FRAME_SIZE 64 |
| 43 | #define CALLEE_SAVE_FRAME_SIZE 128 | 44 | #define CALLEE_REG_FRAME_SIZE 128 |
| 44 | #endif | 45 | #endif |
| 46 | #define CALLEE_SAVE_FRAME_SIZE (CALLEE_REG_FRAME_SIZE + CALLEE_FLOAT_FRAME_SIZE) | ||
| 45 | 47 | ||
| 46 | #ifdef CONFIG_PA20 | 48 | #ifdef CONFIG_PA20 |
| 47 | #define BL b,l | 49 | #define BL b,l |
| @@ -300,9 +302,35 @@ | |||
| 300 | fldd,mb -8(\regs), %fr0 | 302 | fldd,mb -8(\regs), %fr0 |
| 301 | .endm | 303 | .endm |
| 302 | 304 | ||
| 305 | .macro callee_save_float | ||
| 306 | fstd,ma %fr12, 8(%r30) | ||
| 307 | fstd,ma %fr13, 8(%r30) | ||
| 308 | fstd,ma %fr14, 8(%r30) | ||
| 309 | fstd,ma %fr15, 8(%r30) | ||
| 310 | fstd,ma %fr16, 8(%r30) | ||
| 311 | fstd,ma %fr17, 8(%r30) | ||
| 312 | fstd,ma %fr18, 8(%r30) | ||
| 313 | fstd,ma %fr19, 8(%r30) | ||
| 314 | fstd,ma %fr20, 8(%r30) | ||
| 315 | fstd,ma %fr21, 8(%r30) | ||
| 316 | .endm | ||
| 317 | |||
| 318 | .macro callee_rest_float | ||
| 319 | fldd,mb -8(%r30), %fr21 | ||
| 320 | fldd,mb -8(%r30), %fr20 | ||
| 321 | fldd,mb -8(%r30), %fr19 | ||
| 322 | fldd,mb -8(%r30), %fr18 | ||
| 323 | fldd,mb -8(%r30), %fr17 | ||
| 324 | fldd,mb -8(%r30), %fr16 | ||
| 325 | fldd,mb -8(%r30), %fr15 | ||
| 326 | fldd,mb -8(%r30), %fr14 | ||
| 327 | fldd,mb -8(%r30), %fr13 | ||
| 328 | fldd,mb -8(%r30), %fr12 | ||
| 329 | .endm | ||
| 330 | |||
| 303 | #ifdef __LP64__ | 331 | #ifdef __LP64__ |
| 304 | .macro callee_save | 332 | .macro callee_save |
| 305 | std,ma %r3, CALLEE_SAVE_FRAME_SIZE(%r30) | 333 | std,ma %r3, CALLEE_REG_FRAME_SIZE(%r30) |
| 306 | mfctl %cr27, %r3 | 334 | mfctl %cr27, %r3 |
| 307 | std %r4, -136(%r30) | 335 | std %r4, -136(%r30) |
| 308 | std %r5, -128(%r30) | 336 | std %r5, -128(%r30) |
| @@ -340,13 +368,13 @@ | |||
| 340 | ldd -128(%r30), %r5 | 368 | ldd -128(%r30), %r5 |
| 341 | ldd -136(%r30), %r4 | 369 | ldd -136(%r30), %r4 |
| 342 | mtctl %r3, %cr27 | 370 | mtctl %r3, %cr27 |
| 343 | ldd,mb -CALLEE_SAVE_FRAME_SIZE(%r30), %r3 | 371 | ldd,mb -CALLEE_REG_FRAME_SIZE(%r30), %r3 |
| 344 | .endm | 372 | .endm |
| 345 | 373 | ||
| 346 | #else /* ! __LP64__ */ | 374 | #else /* ! __LP64__ */ |
| 347 | 375 | ||
| 348 | .macro callee_save | 376 | .macro callee_save |
| 349 | stw,ma %r3, CALLEE_SAVE_FRAME_SIZE(%r30) | 377 | stw,ma %r3, CALLEE_REG_FRAME_SIZE(%r30) |
| 350 | mfctl %cr27, %r3 | 378 | mfctl %cr27, %r3 |
| 351 | stw %r4, -124(%r30) | 379 | stw %r4, -124(%r30) |
| 352 | stw %r5, -120(%r30) | 380 | stw %r5, -120(%r30) |
| @@ -384,7 +412,7 @@ | |||
| 384 | ldw -120(%r30), %r5 | 412 | ldw -120(%r30), %r5 |
| 385 | ldw -124(%r30), %r4 | 413 | ldw -124(%r30), %r4 |
| 386 | mtctl %r3, %cr27 | 414 | mtctl %r3, %cr27 |
| 387 | ldw,mb -CALLEE_SAVE_FRAME_SIZE(%r30), %r3 | 415 | ldw,mb -CALLEE_REG_FRAME_SIZE(%r30), %r3 |
| 388 | .endm | 416 | .endm |
| 389 | #endif /* ! __LP64__ */ | 417 | #endif /* ! __LP64__ */ |
| 390 | 418 | ||
