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

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  * arch/alpha/lib/fpreg.c
  3.  *
  4.  * (C) Copyright 1998 Linus Torvalds
  5.  */
  6. #if defined(__alpha_cix__) || defined(__alpha_fix__)
  7. #define STT(reg,val)  asm volatile ("ftoit $f"#reg",%0" : "=r"(val));
  8. #else
  9. #define STT(reg,val)  asm volatile ("stt $f"#reg",%0" : "=m"(val));
  10. #endif
  11. unsigned long
  12. alpha_read_fp_reg (unsigned long reg)
  13. {
  14. unsigned long val;
  15. switch (reg) {
  16.       case  0: STT( 0, val); break;
  17.       case  1: STT( 1, val); break;
  18.       case  2: STT( 2, val); break;
  19.       case  3: STT( 3, val); break;
  20.       case  4: STT( 4, val); break;
  21.       case  5: STT( 5, val); break;
  22.       case  6: STT( 6, val); break;
  23.       case  7: STT( 7, val); break;
  24.       case  8: STT( 8, val); break;
  25.       case  9: STT( 9, val); break;
  26.       case 10: STT(10, val); break;
  27.       case 11: STT(11, val); break;
  28.       case 12: STT(12, val); break;
  29.       case 13: STT(13, val); break;
  30.       case 14: STT(14, val); break;
  31.       case 15: STT(15, val); break;
  32.       case 16: STT(16, val); break;
  33.       case 17: STT(17, val); break;
  34.       case 18: STT(18, val); break;
  35.       case 19: STT(19, val); break;
  36.       case 20: STT(20, val); break;
  37.       case 21: STT(21, val); break;
  38.       case 22: STT(22, val); break;
  39.       case 23: STT(23, val); break;
  40.       case 24: STT(24, val); break;
  41.       case 25: STT(25, val); break;
  42.       case 26: STT(26, val); break;
  43.       case 27: STT(27, val); break;
  44.       case 28: STT(28, val); break;
  45.       case 29: STT(29, val); break;
  46.       case 30: STT(30, val); break;
  47.       case 31: STT(31, val); break;
  48. }
  49. return val;
  50. }
  51. #if defined(__alpha_cix__) || defined(__alpha_fix__)
  52. #define LDT(reg,val)  asm volatile ("itoft %0,$f"#reg : : "r"(val));
  53. #else
  54. #define LDT(reg,val)  asm volatile ("ldt $f"#reg",%0" : : "m"(val));
  55. #endif
  56. void
  57. alpha_write_fp_reg (unsigned long reg, unsigned long val)
  58. {
  59. switch (reg) {
  60.       case  0: LDT( 0, val); break;
  61.       case  1: LDT( 1, val); break;
  62.       case  2: LDT( 2, val); break;
  63.       case  3: LDT( 3, val); break;
  64.       case  4: LDT( 4, val); break;
  65.       case  5: LDT( 5, val); break;
  66.       case  6: LDT( 6, val); break;
  67.       case  7: LDT( 7, val); break;
  68.       case  8: LDT( 8, val); break;
  69.       case  9: LDT( 9, val); break;
  70.       case 10: LDT(10, val); break;
  71.       case 11: LDT(11, val); break;
  72.       case 12: LDT(12, val); break;
  73.       case 13: LDT(13, val); break;
  74.       case 14: LDT(14, val); break;
  75.       case 15: LDT(15, val); break;
  76.       case 16: LDT(16, val); break;
  77.       case 17: LDT(17, val); break;
  78.       case 18: LDT(18, val); break;
  79.       case 19: LDT(19, val); break;
  80.       case 20: LDT(20, val); break;
  81.       case 21: LDT(21, val); break;
  82.       case 22: LDT(22, val); break;
  83.       case 23: LDT(23, val); break;
  84.       case 24: LDT(24, val); break;
  85.       case 25: LDT(25, val); break;
  86.       case 26: LDT(26, val); break;
  87.       case 27: LDT(27, val); break;
  88.       case 28: LDT(28, val); break;
  89.       case 29: LDT(29, val); break;
  90.       case 30: LDT(30, val); break;
  91.       case 31: LDT(31, val); break;
  92. }
  93. }
  94. #if defined(__alpha_cix__) || defined(__alpha_fix__)
  95. #define STS(reg,val)  asm volatile ("ftois $f"#reg",%0" : "=r"(val));
  96. #else
  97. #define STS(reg,val)  asm volatile ("sts $f"#reg",%0" : "=m"(val));
  98. #endif
  99. unsigned long
  100. alpha_read_fp_reg_s (unsigned long reg)
  101. {
  102. unsigned long val;
  103. switch (reg) {
  104.       case  0: STS( 0, val); break;
  105.       case  1: STS( 1, val); break;
  106.       case  2: STS( 2, val); break;
  107.       case  3: STS( 3, val); break;
  108.       case  4: STS( 4, val); break;
  109.       case  5: STS( 5, val); break;
  110.       case  6: STS( 6, val); break;
  111.       case  7: STS( 7, val); break;
  112.       case  8: STS( 8, val); break;
  113.       case  9: STS( 9, val); break;
  114.       case 10: STS(10, val); break;
  115.       case 11: STS(11, val); break;
  116.       case 12: STS(12, val); break;
  117.       case 13: STS(13, val); break;
  118.       case 14: STS(14, val); break;
  119.       case 15: STS(15, val); break;
  120.       case 16: STS(16, val); break;
  121.       case 17: STS(17, val); break;
  122.       case 18: STS(18, val); break;
  123.       case 19: STS(19, val); break;
  124.       case 20: STS(20, val); break;
  125.       case 21: STS(21, val); break;
  126.       case 22: STS(22, val); break;
  127.       case 23: STS(23, val); break;
  128.       case 24: STS(24, val); break;
  129.       case 25: STS(25, val); break;
  130.       case 26: STS(26, val); break;
  131.       case 27: STS(27, val); break;
  132.       case 28: STS(28, val); break;
  133.       case 29: STS(29, val); break;
  134.       case 30: STS(30, val); break;
  135.       case 31: STS(31, val); break;
  136. }
  137. return val;
  138. }
  139. #if defined(__alpha_cix__) || defined(__alpha_fix__)
  140. #define LDS(reg,val)  asm volatile ("itofs %0,$f"#reg : : "r"(val));
  141. #else
  142. #define LDS(reg,val)  asm volatile ("lds $f"#reg",%0" : : "m"(val));
  143. #endif
  144. void
  145. alpha_write_fp_reg_s (unsigned long reg, unsigned long val)
  146. {
  147. switch (reg) {
  148.       case  0: LDS( 0, val); break;
  149.       case  1: LDS( 1, val); break;
  150.       case  2: LDS( 2, val); break;
  151.       case  3: LDS( 3, val); break;
  152.       case  4: LDS( 4, val); break;
  153.       case  5: LDS( 5, val); break;
  154.       case  6: LDS( 6, val); break;
  155.       case  7: LDS( 7, val); break;
  156.       case  8: LDS( 8, val); break;
  157.       case  9: LDS( 9, val); break;
  158.       case 10: LDS(10, val); break;
  159.       case 11: LDS(11, val); break;
  160.       case 12: LDS(12, val); break;
  161.       case 13: LDS(13, val); break;
  162.       case 14: LDS(14, val); break;
  163.       case 15: LDS(15, val); break;
  164.       case 16: LDS(16, val); break;
  165.       case 17: LDS(17, val); break;
  166.       case 18: LDS(18, val); break;
  167.       case 19: LDS(19, val); break;
  168.       case 20: LDS(20, val); break;
  169.       case 21: LDS(21, val); break;
  170.       case 22: LDS(22, val); break;
  171.       case 23: LDS(23, val); break;
  172.       case 24: LDS(24, val); break;
  173.       case 25: LDS(25, val); break;
  174.       case 26: LDS(26, val); break;
  175.       case 27: LDS(27, val); break;
  176.       case 28: LDS(28, val); break;
  177.       case 29: LDS(29, val); break;
  178.       case 30: LDS(30, val); break;
  179.       case 31: LDS(31, val); break;
  180. }
  181. }