Diff for /gforth/Attic/hppa.h between versions 1.15 and 1.16

version 1.15, 1996/07/16 20:57:11 version 1.16, 1996/07/19 20:45:01
Line 71  extern void cacheflush(void *, int, int) Line 71  extern void cacheflush(void *, int, int)
   
 #  define ASS17(n)(((((n) >> 13) & 0x1F) << 16)| /* first 5 bits */ \  #  define ASS17(n)(((((n) >> 13) & 0x1F) << 16)| /* first 5 bits */ \
                    ((((n) >>  2) & 0x3FF) << 3)| /* second 11 bits */ \                     ((((n) >>  2) & 0x3FF) << 3)| /* second 11 bits */ \
                    ((((n) >> 12) & 0x1) << 2)  | /* lo sign (aaarg!) */ \                     ((((n) >> 12) & 0x1) << 2)  | /* intermediate bit */ \
                    (((n) < 0) << 0)) /* sign bit */                     (((n) < 0) << 0)) /* low sign bit (aaarg!) */
   
 #  define DIS17(n)(((((n) >> 16) & 0x1F) << 13)| /* first 5 bits */ \  #  define DIS17(n)(((((n) >> 16) & 0x1F) << 13)| /* first 5 bits */ \
                    ((((n) >>  3) & 0x3FF) << 2)| /* second 11 bits */ \                     ((((n) >>  3) & 0x3FF) << 2)| /* second 11 bits */ \
                    ((((n) >>  2) & 0x1) << 12) | /* lo sign (aaarg!) */ \                     ((((n) >>  2) & 0x1) << 12) | /* intermediate bit */ \
                    (-((n) & 1) << 18)) /* sign bit */                     (-((n) & 1) << 18)) /* low sign bit (aaarg!) */
   
 #  define CODE_ADDRESS(cfa)\  #  define CODE_ADDRESS(cfa)\
 ((Label)({ \  ((Label)({ \
              unsigned int *_cfa=(unsigned int *)(cfa); unsigned _ca; \               unsigned int *_cfa=(unsigned int *)(cfa); \
              if((_cfa[0] & 0xFFE0E002) == 0xE8000000) /* relative branch */ \               unsigned int _ca = DIS17(_cfa[0]); \
                if((_cfa[0] & 0xFFE0E000) == 0xE8000000) /* relative branch */ \
              { \               { \
                  _ca = _cfa[0]; \  
                  _ca = DIS17(_ca); \  
                  _ca += (int) (_cfa + 1); \                   _ca += (int) (_cfa + 1); \
              } \               } \
              else if((_cfa[0] & 0xFFE0E002) == 0xE0000000) /* absolute branch */ \               else if((_cfa[0] & 0xFFE0E000) == 0xE0000000) /* absolute branch */ \
              { \               { \
                  _ca = _cfa[0]; \                   _ca = _ca-4; \
                  _ca = DIS17(_ca)-4; \  
              } \               } \
              else \               else \
              { \               { \
                  _ca = _cfa[0]; \                   _ca = (int)_cfa; \
                  _ca = (_ca<<31) | \  
                  ((_ca>>1 ) & 0x00001800) | \  
                  ((_ca>>3 ) & 0x0003E000) | \  
                  ((_ca<<4 ) & 0x000C0000) | \  
                  ((_ca<<19) & 0x7FF00000) |  \  
                  ((_cfa[1]>>1) & 0xFFC); \  
              } \               } \
              /* printf("code-address at %08x: %08x\n",_ca,_cfa); */ \               /* printf("code-address at %08x: %08x\n",_ca,_cfa); */ \
              _ca; \               _ca + ((_cfa[0] & 2) << 1); \
          }))           }))
   
 #  define MAKE_CF(cfa,ca) \  #  define MAKE_CF(cfa,ca) \
Line 120  extern void cacheflush(void *, int, int) Line 112  extern void cacheflush(void *, int, int)
                    (   0 << 13) | /* space register */ \                     (   0 << 13) | /* space register */ \
                    (   0 <<  1) | /* if 1, don't execute delay slot */ \                     (   0 <<  1) | /* if 1, don't execute delay slot */ \
                    ASS17(_ca)); \                     ASS17(_ca)); \
          _cfa[1] = ((long *)(_ca))[-1]; /* or %r0,%r0,%r0 */; \           _cfa[1] = ((long *)(_ca))[-1]; /* fill delay slot with first inst */ \
      } \       } \
      else if(_dp < 0x40000 || _dp >= -0x40000) \       else if(_dp < 0x40000 || _dp >= -0x40000) \
      { \       { \
Line 129  extern void cacheflush(void *, int, int) Line 121  extern void cacheflush(void *, int, int)
                    (   0 << 13) | /* space register */ \                     (   0 << 13) | /* space register */ \
                    (   0 <<  1) | /* if 1, don't execute delay slot */ \                     (   0 <<  1) | /* if 1, don't execute delay slot */ \
                    ASS17(_dp)); \                     ASS17(_dp)); \
          _cfa[1] = ((long *)(_ca))[-1]; /* 0x08000240 or %r0,%r0,%r0 */; \           _cfa[1] = ((long *)(_ca))[-1]; /* fill delay slot with first inst */ \
      } \       } \
      else \       else \
      { \       { \
          _ca -= 4; \           fprintf(stderr,"CODE FIELD assignment failed, use ITC instead of DTC\n"); exit(1); \
          _cfa[0] = (0x08 << 26) | \  
          ((int)_ca<0) | \  
          (_ca & 0x00001800)<<1 | \  
          (_ca & 0x0003E000)<<3 | \  
          (_ca & 0x000C0000)>>4 | \  
          (_ca & 0x7FF00000)>>19; \  
          _ca &= 0x3FF; \  
          _cfa[1] =((0x38 << 26) | /* major opcode */ \  
                    (   1 << 21) | /* register */ \  
                    (   0 << 13) | /* space register */ \  
                    (   1 <<  1) | /* if 1, don't execute delay slot */ \  
                    ASS17(_ca)); \  
      } \       } \
      DOUT("%08x: %08x,%08x\n",(int)_cfa,_cfa[0],_cfa[1]); \       DOUT("%08x: %08x,%08x\n",(int)_cfa,_cfa[0],_cfa[1]); \
  })   })
Line 158  extern void cacheflush(void *, int, int) Line 138  extern void cacheflush(void *, int, int)
 #  define DOES_CODE1(cfa)       ((Xt *)(((long *)(cfa))[1]))  #  define DOES_CODE1(cfa)       ((Xt *)(((long *)(cfa))[1]))
   
 #  define DOES_CODE(cfa) \  #  define DOES_CODE(cfa) \
    (((((*(long *)(cfa)) & 0xF7E0E002) == 0xE0000000) && \     (((((*(long *)(cfa)) & 0xF7E0E002) == 0xE0000002) && \
      ((long)(CODE_ADDRESS(CODE_ADDRESS(cfa))) == (long)symbols[DODOES])) ? \       ((long)(CODE_ADDRESS(cfa)) == (long)symbols[DODOES])) ? \
     DOES_CODE1(cfa) : 0L)      DOES_CODE1(cfa) : 0L)
   
 /*      ({register Xt * _ret asm("%r31"); _ret;}) */  /*      ({register Xt * _ret asm("%r31"); _ret;}) */
Line 167  extern void cacheflush(void *, int, int) Line 147  extern void cacheflush(void *, int, int)
 /* HPPA uses register 2 for branch and link */  /* HPPA uses register 2 for branch and link */
   
 #  define DOES_HANDLER_SIZE 8  #  define DOES_HANDLER_SIZE 8
 #  define MAKE_DOES_HANDLER(cfa)  ({ *(long *)(cfa)=DODOES; })  #  define MAKE_DOES_HANDLER(cfa)
 #ifdef undefined  
 #  define MAKE_DOES_HANDLER(cfa) \  
 ({ \  
      long *_cfa   = (long *)(cfa); \  
      int _ca      = (int)symbols[DODOES]; \  
      int _dp      = _ca-(int)(_cfa+2); \  
      \  
      if(_ca < 0x40000) /* Branch absolute */ \  
      { \  
          _cfa[0] =((0x38 << 26) | /* major opcode */ \  
                    (   0 << 21) | /* register */ \  
                    (   0 << 13) | /* space register */ \  
                    (   0 <<  1) | /* if 1, don't execute delay slot */ \  
                    ASS17(_ca)); \  
          _cfa[1] = 0x08000240 /* or %r0,%r0,%r0 */; \  
      } \  
      else if(_dp < 0x40000 || _dp >= -0x40000) \  
      { \  
          _cfa[0] =((0x3A << 26) | /* major opcode */ \  
                    (   0 << 21) | /* register */ \  
                    (   0 << 13) | /* space register */ \  
                    (   0 <<  1) | /* if 1, don't execute delay slot */ \  
                    ASS17(_dp)); \  
          _cfa[1] = 0x08000240 /* or %r0,%r0,%r0 */; \  
      } \  
      else \  
      { \  
          _ca -= 4; \  
          _cfa[0] = ((0x08 << 26) | \  
                     ((int)_ca<0) | \  
                     (_ca & 0x00001800)<<1 | \  
                     (_ca & 0x0003E000)<<3 | \  
                     (_ca & 0x000C0000)>>4 | \  
                     (_ca & 0x7FF00000)>>19); \  
          _ca &= 0x3FF; \  
          _cfa[1] =((0x38 << 26) | /* major opcode */ \  
                    (   1 << 21) | /* register */ \  
                    (   0 << 13) | /* space register */ \  
                    (   1 <<  1) | /* if 1, don't execute delay slot */ \  
                    ASS17(_ca)); \  
      } \  
      DOUT("%08x: %08x,%08x\n",(int)_cfa,_cfa[0],_cfa[1]); \  
  })  
 #endif  
   
 #  define MAKE_DOES_CF(cfa,ca) \  #  define MAKE_DOES_CF(cfa,ca) \
 ({ \  ({ \

Removed from v.1.15  
changed lines
  Added in v.1.16


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>