home *** CD-ROM | disk | FTP | other *** search
/ RISCWORLD 7 / RISCWORLD_VOL7.iso / Software / Issue4 / SDL / gcc346 / !gcc / include / unixlib / internal / s / elf-macros < prev   
Encoding:
Text File  |  2006-09-17  |  2.4 KB  |  109 lines

  1. @ UnixLib assembler helper macros (ELF version)
  2. @ Copyright (c) 2002, 2003, 2004, 2005, 2006 UnixLib Developers
  3. @
  4. @ This file and aof-macros.s must be kept in sync with each other
  5.  
  6. #ifndef __SOFTFP__
  7. #define __SOFTFP__ 0
  8. #endif
  9.  
  10.     @ Turn on macro extensions, allowing the use of LOCAL.
  11.     .altmacro
  12.  
  13.     @ Macro for embedding function names in code, just before
  14.     @ the function prologue.
  15.     .macro    NAME    name
  16.     LOCAL t0, t1
  17. t0:
  18.     .asciz    "\name"
  19.     .align
  20. t1:
  21.     .word    0xff000000 + (t1 - t0)
  22.     .endm
  23.  
  24.     @ Assembler equivalent of __set_errno in errno.h.
  25.     @ #define __set_errno(val) (errno = (val), -1)
  26.     @ Entry condition
  27.     @   val = new error code
  28.     @ Exit condition
  29.     @   val = -1
  30.     @   Rerrno destroyed
  31.  
  32.     .macro    __set_errno    val, Rerrno
  33.     .if __UNIXLIB_ERRNO_THREADED > 0
  34.     ldr    \Rerrno, =__pthread_running_thread
  35.     ldr    \Rerrno, [\Rerrno]
  36.     str    \val, [\Rerrno, #__PTHREAD_ERRNO_OFFSET]
  37.     .else
  38.     ldr    \Rerrno, =errno
  39.     str    \val, [\Rerrno]
  40.     .endif
  41.     mov    \val, #-1
  42.     .endm
  43.  
  44.  
  45.     .macro    __get_errno    val, Rerrno
  46.     .if __UNIXLIB_ERRNO_THREADED > 0
  47.     ldr    \Rerrno, =__pthread_running_thread
  48.     ldr    \Rerrno, [\Rerrno]
  49.     ldr    \val, [\Rerrno, #__PTHREAD_ERRNO_OFFSET]
  50.     .else
  51.     ldr    \Rerrno, =errno
  52.     ldr    \val, [\Rerrno]
  53.     .endif
  54.     .endm
  55.  
  56.     @ NetSWI, NetSWIsimple, NetSWI0 and NetSWIsimple0 are macros to call
  57.     @ one of the networking (TCP/IP) SWIs.
  58.  
  59.     @ Calls networking (TCP/IP) SWI.
  60.     .macro    NetSWI    swiname
  61.     swi    \swiname
  62.     blvs    __net_error
  63.     .endm
  64.  
  65.  
  66.     @ Calls networking (TCP/IP) SWI and returns to lr.
  67.     .macro    NetSWIsimple    swiname
  68.     swi    \swiname
  69.     movvc    pc, lr
  70.     b    __net_error
  71.     .endm
  72.  
  73.     @ Calls networking (TCP/IP) SWI.
  74.     @ Returns 0 in R0 for success, a non zero errno in R0 when
  75.     @ error happened.
  76.     .macro    NetSWI0    swiname
  77.     swi    \swiname
  78.     movvc    a1, #-
  79.     blvs    __net_error
  80.     .endm
  81.  
  82.  
  83.     @ Calls networking (TCP/IP) SWI and returns to lr.
  84.     @ Returns 0 in R0 for success, a non zero errno in R0 when
  85.     @ error happened.
  86.     .macro    NetSWIsimple0    swiname
  87.     swi    \swiname
  88.     movvc    a1, #0
  89.     movvc    pc, lr
  90.     b    __net_error
  91.     .endm
  92.  
  93.  
  94.     @ Macro to change processor modes and interrupt flags
  95.     @ Works in 26bit or 32bit modes, on all architectures
  96.     @ Use e.g. CHGMODE a1, SVC_Mode+IFlag
  97.     .macro    CHGMODE    scratch, mode
  98.     teq    a1, a1    @ Set Z
  99.     teq    pc, pc    @ EQ if 32-bit mode
  100.     teqnep    pc, #\mode
  101.     mrseq    \scratch, CPSR    @ Acts a NOP for TEQP
  102.     biceq    \scratch, \scratch, #0xcf    @ Preserve 32bit mode bit
  103.     .if    \mode <> 0
  104.     orreq    \scratch, \scratch, #((\mode) && 0xf) + ((\mode) >> 20)
  105.     .endif
  106.     msreq    CPSR_c, \scratch
  107.     mov    a1, a1    @ Avoid StrongARM MSR bug
  108.     .endm
  109.