]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - include/asm-parisc/assembly.h
Add arch_ptrace_stop
[linux-2.6-omap-h63xx.git] / include / asm-parisc / assembly.h
index b24a99e3ef9cf31731a81b1a8d8930a47acb0d9e..5587f00238815d876c427cbfbba4b0e246d3f275 100644 (file)
 #ifndef _PARISC_ASSEMBLY_H
 #define _PARISC_ASSEMBLY_H
 
-#ifdef __LP64__
+#define CALLEE_FLOAT_FRAME_SIZE        80
+
+#ifdef CONFIG_64BIT
 #define LDREG  ldd
 #define STREG  std
 #define LDREGX  ldd,s
 #define LDREGM ldd,mb
 #define STREGM std,ma
-#define SHRREG  shrd
+#define SHRREG shrd
+#define SHLREG shld
+#define ADDIB   addib,*
+#define CMPB    cmpb,*
+#define ANDCM   andcm,*
 #define RP_OFFSET      16
 #define FRAME_SIZE     128
-#define CALLEE_SAVE_FRAME_SIZE 144
-#else
+#define CALLEE_REG_FRAME_SIZE  144
+#define ASM_ULONG_INSN .dword
+#else  /* CONFIG_64BIT */
 #define LDREG  ldw
 #define STREG  stw
 #define LDREGX  ldwx,s
 #define LDREGM ldwm
 #define STREGM stwm
-#define SHRREG  shr
+#define SHRREG shr
+#define SHLREG shlw
+#define ADDIB   addib,
+#define CMPB    cmpb,
+#define ANDCM   andcm
 #define RP_OFFSET      20
 #define FRAME_SIZE     64
-#define CALLEE_SAVE_FRAME_SIZE 128
+#define CALLEE_REG_FRAME_SIZE  128
+#define ASM_ULONG_INSN .word
 #endif
 
+#define CALLEE_SAVE_FRAME_SIZE (CALLEE_REG_FRAME_SIZE + CALLEE_FLOAT_FRAME_SIZE)
+
 #ifdef CONFIG_PA20
+#define LDCW           ldcw,co
 #define BL             b,l
 # ifdef CONFIG_64BIT
 #  define LEVEL                2.0w
 #  define LEVEL                2.0
 # endif
 #else
+#define LDCW           ldcw
 #define BL             bl
 #define LEVEL          1.1
 #endif
 
 #ifdef __ASSEMBLY__
 
-#ifdef __LP64__
+#ifdef CONFIG_64BIT
 /* the 64-bit pa gnu assembler unfortunately defaults to .level 1.1 or 2.0 so
  * work around that for now... */
        .level 2.0w
        .endm
 
        .macro loadgp
-#ifdef __LP64__
+#ifdef CONFIG_64BIT
        ldil            L%__gp, %r27
        ldo             R%__gp(%r27), %r27
 #else
        fldd,mb -8(\regs),       %fr0
        .endm
 
-#ifdef __LP64__
+       .macro  callee_save_float
+       fstd,ma  %fr12, 8(%r30)
+       fstd,ma  %fr13, 8(%r30)
+       fstd,ma  %fr14, 8(%r30)
+       fstd,ma  %fr15, 8(%r30)
+       fstd,ma  %fr16, 8(%r30)
+       fstd,ma  %fr17, 8(%r30)
+       fstd,ma  %fr18, 8(%r30)
+       fstd,ma  %fr19, 8(%r30)
+       fstd,ma  %fr20, 8(%r30)
+       fstd,ma  %fr21, 8(%r30)
+       .endm
+
+       .macro  callee_rest_float
+       fldd,mb -8(%r30),   %fr21
+       fldd,mb -8(%r30),   %fr20
+       fldd,mb -8(%r30),   %fr19
+       fldd,mb -8(%r30),   %fr18
+       fldd,mb -8(%r30),   %fr17
+       fldd,mb -8(%r30),   %fr16
+       fldd,mb -8(%r30),   %fr15
+       fldd,mb -8(%r30),   %fr14
+       fldd,mb -8(%r30),   %fr13
+       fldd,mb -8(%r30),   %fr12
+       .endm
+
+#ifdef CONFIG_64BIT
        .macro  callee_save
-       std,ma    %r3,  CALLEE_SAVE_FRAME_SIZE(%r30)
+       std,ma    %r3,   CALLEE_REG_FRAME_SIZE(%r30)
        mfctl     %cr27, %r3
        std       %r4,  -136(%r30)
        std       %r5,  -128(%r30)
        ldd     -128(%r30),    %r5
        ldd     -136(%r30),    %r4
        mtctl   %r3, %cr27
-       ldd,mb  -CALLEE_SAVE_FRAME_SIZE(%r30),    %r3
+       ldd,mb  -CALLEE_REG_FRAME_SIZE(%r30),    %r3
        .endm
 
-#else /* ! __LP64__ */
+#else /* ! CONFIG_64BIT */
 
        .macro  callee_save
-       stw,ma   %r3,   CALLEE_SAVE_FRAME_SIZE(%r30)
+       stw,ma   %r3,   CALLEE_REG_FRAME_SIZE(%r30)
        mfctl    %cr27, %r3
        stw      %r4,   -124(%r30)
        stw      %r5,   -120(%r30)
        ldw     -120(%r30),   %r5
        ldw     -124(%r30),   %r4
        mtctl   %r3, %cr27
-       ldw,mb  -CALLEE_SAVE_FRAME_SIZE(%r30),   %r3
+       ldw,mb  -CALLEE_REG_FRAME_SIZE(%r30),   %r3
        .endm
-#endif /* ! __LP64__ */
+#endif /* ! CONFIG_64BIT */
 
        .macro  save_specials   regs
 
        mtctl    %r0,   %cr18
        SAVE_CR  (%cr18, PT_IAOQ1(\regs))
 
-#ifdef __LP64__
+#ifdef CONFIG_64BIT
        /* cr11 (sar) is a funny one.  5 bits on PA1.1 and 6 bit on PA2.0
         * For PA2.0 mtsar or mtctl always write 6 bits, but mfctl only
         * reads 5 bits.  Use mfctl,w to read all six bits.  Otherwise