assembler.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:2k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  *  linux/asm-arm/proc-armo/assembler.h
  3.  *
  4.  *  Copyright (C) 1996 Russell King
  5.  *
  6.  * This program is free software; you can redistribute it and/or modify
  7.  * it under the terms of the GNU General Public License version 2 as
  8.  * published by the Free Software Foundation.
  9.  *
  10.  *  This file contains arm architecture specific defines
  11.  *  for the different processors
  12.  */
  13. #define MODE_USR USR26_MODE
  14. #define MODE_FIQ FIQ26_MODE
  15. #define MODE_IRQ IRQ26_MODE
  16. #define MODE_SVC SVC26_MODE
  17. #define DEFAULT_FIQ MODE_FIQ
  18. #ifdef __STDC__
  19. #define LOADREGS(cond, base, reglist...)
  20. ldm##cond base,reglist^
  21. #define RETINSTR(instr, regs...)
  22. instr##s regs
  23. #else
  24. #define LOADREGS(cond, base, reglist...)
  25. ldm/**/cond base,reglist^
  26. #define RETINSTR(instr, regs...)
  27. instr/**/s regs
  28. #endif
  29. #define MODENOP
  30. mov r0, r0
  31. #define MODE(savereg,tmpreg,mode) 
  32. mov savereg, pc; 
  33. bic tmpreg, savereg, $0x0c000003; 
  34. orr tmpreg, tmpreg, $mode; 
  35. teqp tmpreg, $0
  36. #define RESTOREMODE(savereg) 
  37. teqp savereg, $0
  38. #define SAVEIRQS(tmpreg)
  39. #define RESTOREIRQS(tmpreg)
  40. #define DISABLEIRQS(tmpreg)
  41. teqp pc, $0x08000003
  42. #define ENABLEIRQS(tmpreg)
  43. teqp pc, $0x00000003
  44. #define USERMODE(tmpreg)
  45. teqp pc, $0x00000000;
  46. mov r0, r0
  47. #define SVCMODE(tmpreg)
  48. teqp pc, $0x00000003;
  49. mov r0, r0
  50. /*
  51.  * Save the current IRQ state and disable IRQs
  52.  * Note that this macro assumes FIQs are enabled, and
  53.  * that the processor is in SVC mode.
  54.  */
  55. .macro save_and_disable_irqs, oldcpsr, temp
  56.   mov oldcpsr, pc
  57.   orr temp, oldcpsr, #0x08000000
  58.   teqp temp, #0
  59.   .endm
  60. /*
  61.  * Restore interrupt state previously stored in
  62.  * a register
  63.  * ** Actually do nothing on Arc - hope that the caller uses a MOVS PC soon
  64.  * after!
  65.  */
  66. .macro restore_irqs, oldcpsr
  67.   @ This be restore_irqs
  68.   .endm
  69. /*
  70.  * These two are used to save LR/restore PC over a user-based access.
  71.  * The old 26-bit architecture requires that we do.  On 32-bit
  72.  * architecture, we can safely ignore this requirement.
  73.  */
  74. .macro save_lr
  75. str lr, [sp, #-4]!
  76. .endm
  77. .macro restore_pc
  78. ldmfd sp!, {pc}^
  79. .endm
  80. #define USER(x...)
  81. 9999: x;
  82. .section __ex_table,"a";
  83. .align 3;
  84. .long 9999b,9001f;
  85. .previous