home *** CD-ROM | disk | FTP | other *** search
/ Dream 57 / Amiga_Dream_57.iso / Amiga / Jeux / Reflexion / Crafty-15.19.lha / crafty-15.19 / src / Sparc.s < prev    next >
Text File  |  1998-09-13  |  10KB  |  519 lines

  1. ! Diag info offsets    
  2.     
  3. #define D_ATTACKS     0
  4. #define D_MOBILITY     4
  5. #define D_WHICH_ATTACK     8
  6. #define D_SHIFT        12
  7. #define D_MASK        13                    
  8. #define AD_SHIFT    14
  9. #define AD_MASK        15
  10. #define AD_WHICH_ATTACK    16
  11. #define AD_MOBILITY    20
  12. #define AD_ATTACKS    24                
  13.  
  14. ! position offsets
  15.     
  16. #define W_OCCUPIED      0
  17. #define B_OCCUPIED      8        
  18. #define RL90         16    
  19. #define RL45         24
  20. #define RR45         32        
  21.     
  22. ! struct at offsets    
  23. #define WHICH_ATTACK       0
  24. #define FILE_ATTACKS     512
  25. #define RANK_ATTACKS    1280
  26. #define LEN8_MOBILITY    1376
  27. #define SHRT_MOBILITY    1472                
  28.  
  29. #define diag_info    o0
  30. #define boardp        o1    
  31. #define temp        o2
  32. #define shift        o3
  33. #define mask        o4
  34. #define which_attack    o5    
  35. #define attack_index    g2    
  36. #define attack_vector    g3
  37. #define mobility_vector    g3    
  38. #define occupied    g4    
  39. #define occupied_hi    g4    
  40. #define occupied_lo    g5    
  41.     
  42. .text
  43.     .align 4
  44.     .global AttacksDiaga1Func
  45. AttacksDiaga1Func:    
  46.     ldub    [%diag_info + AD_SHIFT], %shift
  47.     
  48.     ldub    [%diag_info + AD_MASK], %mask
  49.     cmp    %shift, 32
  50.     blt,a    1f
  51.     add    %boardp, 4, %boardp
  52. 1:    
  53.     ld    [%boardp + RL45], %occupied
  54.     
  55.     ! srl implicitly ands the shift with 0x1f
  56.     srl    %occupied, %shift, %temp
  57.     ld    [%diag_info + AD_WHICH_ATTACK], %which_attack
  58.     
  59.     ld    [%diag_info + AD_ATTACKS], %attack_vector
  60.     and    %temp, %mask, %temp
  61.     
  62.     ldub    [%which_attack + %temp], %attack_index
  63.     
  64.     sll    %attack_index, 3, %attack_index
  65.     
  66.     retl    
  67.     
  68.     ldd    [%attack_vector + %attack_index], %o0
  69.     
  70.     
  71.     .align 4
  72.     .global AttacksDiagh1Func
  73. AttacksDiagh1Func:    
  74.     ldub    [%diag_info + D_SHIFT], %shift
  75.     
  76.     ldub    [%diag_info + D_MASK], %mask
  77.     cmp    %shift, 32
  78.     blt,a    1f
  79.     add    %boardp, 4, %boardp
  80. 1:
  81.     ld    [%boardp + RR45], %occupied
  82.     
  83.     ! srl implicitly ands the shift with 0x1f
  84.     srl    %occupied, %shift, %temp
  85.     ld    [%diag_info + D_WHICH_ATTACK], %which_attack
  86.     
  87.     and    %temp, %mask, %temp
  88.     ld    [%diag_info + D_ATTACKS], %attack_vector
  89.     
  90.     ldub    [%which_attack + %temp], %attack_index
  91.     
  92.     sll    %attack_index, 3, %attack_index
  93.     
  94.     retl    
  95.     
  96.     ldd    [%attack_vector + %attack_index], %o0
  97.     
  98.     
  99.     .align 4
  100.     .global AttacksBishopFunc
  101. AttacksBishopFunc:    
  102.     ldub    [%diag_info + AD_SHIFT], %shift
  103.     mov    %boardp, %temp
  104.  
  105.     ldub    [%diag_info + AD_MASK], %mask
  106.     cmp    %shift, 32
  107.     blt,a    1f
  108.     add    %temp, 4, %temp
  109.     
  110. 1:    
  111.     ld    [%temp + RL45], %occupied
  112.     
  113.     ! srl implicitly ands the shift with 0x1f
  114.     srl    %occupied, %shift, %temp
  115.     ld    [%diag_info + AD_WHICH_ATTACK], %which_attack
  116.     
  117.     and    %temp, %mask, %temp
  118.     ld    [%diag_info + AD_ATTACKS], %attack_vector
  119.     
  120.     ldub    [%which_attack + %temp], %attack_index
  121.     
  122.     sll    %attack_index, 3, %attack_index
  123.     ldub    [%diag_info + D_SHIFT], %shift
  124.     
  125.     ldd    [%attack_vector + %attack_index], %occupied
  126.     
  127.     ldub    [%diag_info + D_MASK], %mask
  128.     cmp    %shift, 32    
  129.     blt,a    1f
  130.     add    %boardp, 4, %boardp
  131. 1:    
  132.     ld    [%boardp + RR45], %temp
  133.     
  134.     ! srl implicitly ands the shift with 0x1f
  135.     srl    %temp, %shift, %temp
  136.     ld    [%diag_info + D_WHICH_ATTACK], %which_attack
  137.     
  138.     and    %temp, %mask, %temp
  139.     ld    [%diag_info + D_ATTACKS], %attack_vector
  140.     
  141.     ldub    [%which_attack + %temp], %attack_index
  142.     
  143.     sll    %attack_index, 3, %attack_index
  144.     
  145.     ldd    [%attack_vector + %attack_index], %o0
  146.     
  147.     or    %occupied_hi, %o0, %o0
  148.     retl
  149.     or    %occupied_lo, %o1, %o1
  150.     
  151.     .align 4
  152.     .global MobilityDiaga1Func
  153. MobilityDiaga1Func:    
  154.     ldub    [%diag_info + AD_SHIFT], %shift
  155.     
  156.     ldub    [%diag_info + AD_MASK], %mask
  157.     cmp    %shift, 32
  158.     blt,a    1f
  159.     add    %boardp, 4, %boardp
  160. 1:    
  161.     ld    [%boardp + RL45], %occupied
  162.     
  163.     ! srl implicitly ands the shift with 0x1f
  164.     srl    %occupied, %shift, %temp
  165.     ld    [%diag_info + AD_WHICH_ATTACK], %which_attack
  166.     
  167.     and    %temp, %mask, %temp
  168.     ld    [%diag_info + AD_MOBILITY], %mobility_vector
  169.     
  170.     ldub    [%which_attack + %temp], %attack_index
  171.     
  172.     retl    
  173.     
  174.     ldub    [%mobility_vector + %attack_index], %o0
  175.     
  176.     
  177.     .align 4
  178.     .global MobilityDiagh1Func
  179. MobilityDiagh1Func:    
  180.     ldub    [%diag_info + D_SHIFT], %shift
  181.     
  182.     ldub    [%diag_info + D_MASK], %mask
  183.     cmp    %shift, 32
  184.     blt,a    1f
  185.     add    %boardp, 4, %boardp
  186. 1:
  187.     ld    [%boardp + RR45], %occupied
  188.     
  189.     ! srl implicitly ands the shift with 0x1f
  190.     srl    %occupied, %shift, %temp
  191.     ld    [%diag_info + D_WHICH_ATTACK], %which_attack
  192.     
  193.     and    %temp, %mask, %temp
  194.     ld    [%diag_info + D_MOBILITY], %mobility_vector
  195.     
  196.     ldub    [%which_attack + %temp], %attack_index
  197.     
  198.     retl    
  199.     
  200.     ldub    [%mobility_vector + %attack_index], %o0
  201.     
  202. #undef diag_info
  203. #undef boardp
  204. #undef temp
  205. #undef shift
  206. #undef mask
  207. #undef which_attack
  208. #undef attack_index
  209. #undef attack_vector
  210. #undef mobility_vector
  211. #undef occupied
  212. #undef occupied_hi
  213. #undef occupied_lo
  214.  
  215.  
  216. #define    sq        o0
  217. #define att        o0
  218. #define boardp        o1
  219. #define file        o2
  220. #define rankc        o3
  221. #define filec        o4
  222. #define rank        o5
  223. #define    rank12        g1
  224. #define file12        g1
  225. #define occupied    g2
  226. #define occupied_hi    g2
  227. #define occupied_lo    g3
  228. #define occupied2    g4
  229. #define attack_index    g4
  230. #define attack        g4
  231. #define temp3        g4
  232. #define temp        g5
  233.     
  234.     .align    4
  235.     .global AttacksRankFunc
  236. AttacksRankFunc:    
  237.     and    %sq, 7, %file
  238.     xnor    %sq, 0, %rankc
  239.     
  240.     and    %rankc, (7 << 3), %rankc
  241.     sll    %file, 1, %temp
  242.     
  243.     add    %file, %temp, %file12
  244.     add     %rankc, 1, %temp
  245.     
  246.     sll    %file, 6, %file
  247.     cmp    %rankc, 32
  248.     blt,a    1f
  249.     add    %boardp, 4, %boardp
  250. 1:    
  251.     sll    %file12, 2, %file12
  252.     ld    [%boardp + W_OCCUPIED], %occupied
  253.     
  254.     sethi    %hi(at), %att
  255.     ld    [%boardp + B_OCCUPIED], %occupied2
  256.     
  257.     or    %occupied, %occupied2, %occupied
  258.     or    %att, %lo(at), %att
  259.     
  260.     ! srl implicitly ands the shift with 0x1f
  261.     srl    %occupied, %temp, %temp
  262.     add    %file, %att, %file
  263.     
  264.     and    %temp, 0x3f, %temp
  265.     add    %file12, %att, %file12
  266.     
  267.     ! add    %temp, %file, %temp
  268.     ! ldub    [%temp + WHICH_ATTACK], %attack_index
  269.     ldub    [%temp + %file], %attack_index
  270.     add    %file12, RANK_ATTACKS, %file12
  271.  
  272.     clr    %o0
  273.     clr    %o1
  274.     bge    1f
  275.     
  276.     ldub    [%attack_index + %file12], %attack
  277.  
  278.     retl
  279.     sll    %attack, %rankc, %o1
  280.  
  281. 1:    retl
  282.     sll    %attack, %rankc, %o0
  283.  
  284.     
  285.     .global    AttacksFileFunc
  286. AttacksFileFunc:    
  287.     srl    %sq, 3, %rank
  288.     xnor    %sq, 0, %filec
  289.     
  290.     sll    %rank, 1, %temp
  291.     and    %filec, 7, %filec
  292.     
  293.     add    %rank, %temp, %rank12
  294.     sll    %filec, 3, %temp
  295.  
  296.     add    %temp, 1, %temp
  297.     sll    %rank12, 5, %rank12
  298.     
  299.     sll    %rank, 6, %rank
  300.     cmp    %temp, 32
  301.     blt,a    1f
  302.     add    %boardp, 4, %boardp
  303. 1:    
  304.     sethi    %hi(at), %att
  305.     ld    [%boardp + RL90], %occupied
  306.     
  307.     ! srl implicitly ands the shift with 0x1f
  308.     srl    %occupied, %temp, %temp
  309.     or    %att, %lo(at), %att
  310.     
  311.     and    %temp, 0x3f, %temp
  312.     add    %rank, %att, %rank
  313.     
  314.     ! add    %temp, %rank, %temp
  315.     ! ldub    [%temp + WHICH_ATTACK], %attack_index
  316.     add    %rank12, FILE_ATTACKS, %rank12
  317.     ldub    [%temp + %rank], %attack_index
  318.  
  319.     sll    %attack_index, 3, %attack_index
  320.     add    %rank12, %att, %rank12
  321.     
  322.     ldd    [%attack_index + %rank12], %o0
  323.     
  324.     sll    %o0, %filec, %o0
  325.     retl
  326.     sll    %o1, %filec, %o1
  327.  
  328.     
  329.     .global AttacksRookFunc    
  330. AttacksRookFunc:
  331.     and    %sq, 7, %file
  332.     xnor    %sq, 0, %rankc
  333.     
  334.     srl    %sq, 3, %rank
  335.     xnor    %sq, 0, %filec
  336.     
  337.     and    %rankc, (7 << 3), %rankc
  338.     sll    %file, 1, %temp
  339.     
  340.     add    %file, %temp, %file12
  341.     sethi    %hi(at), %att
  342.  
  343.     mov    %boardp, %temp3
  344.     cmp    %rankc, 32
  345.     blt,a    1f
  346.     add    %temp3, 4, %temp3
  347. 1:        
  348.     sll    %file, 6, %file
  349.     ld    [%temp3 + W_OCCUPIED], %occupied
  350.     
  351.     or    %att, %lo(at), %att
  352.     ld    [%temp3 + B_OCCUPIED], %occupied2
  353.  
  354.     sll    %file12, 2, %file12
  355.     add     %rankc, 1, %temp
  356.  
  357.     add    %file, %att, %file
  358.     or    %occupied, %occupied2, %occupied
  359.     
  360.     ! srl implicitly ands the shift with 0x1f
  361.     srl    %occupied, %temp, %temp
  362.     add    %file12, %att, %file12
  363.     
  364.     and    %temp, 0x3f, %temp
  365.     add    %file12, RANK_ATTACKS, %file12
  366.     
  367.     ! add    %temp, %file, %temp
  368.     ! ldub    [%temp + WHICH_ATTACK], %attack_index
  369.     ldub    [%temp + %file], %attack_index
  370.     
  371.     and    %filec, 7, %filec
  372.     sll    %rank, 1, %temp
  373.     bge    1f
  374.     
  375.     ldub    [%attack_index + %file12], %attack
  376.  
  377.     clr    %occupied_hi
  378.     b 2f
  379.     sll    %attack, %rankc, %occupied_lo
  380.  
  381. 1:    sll    %attack, %rankc, %occupied_hi
  382.     clr    %occupied_lo
  383.     
  384. 2:
  385.     add    %rank, %temp, %rank12
  386.     sll    %filec, 3, %temp
  387.     
  388.     sll    %rank12, 5, %rank12
  389.     add    %temp, 1, %temp
  390.  
  391.     sll    %rank, 6, %rank
  392.     cmp    %temp, 32
  393.     blt,a    1f
  394.     add    %boardp, 4, %boardp
  395. 1:
  396.     ld    [%boardp + RL90], %temp3
  397.     add    %rank12, %att, %rank12
  398.     
  399.     ! srl implicitly ands the shift with 0x1f
  400.     srl    %temp3, %temp, %temp
  401.     add    %rank, %att, %rank
  402.     
  403.     and    %temp, 0x3f, %temp
  404.     
  405.     ! add    %temp, %rank, %temp
  406.     ! ldub    [%temp + WHICH_ATTACK], %attack_index
  407.     ldub    [%temp + %rank], %attack_index
  408.  
  409.     sll    %attack_index, 3, %attack_index
  410.     add    %rank12, FILE_ATTACKS, %rank12
  411.     
  412.     ldd    [%attack_index + %rank12], %o0
  413.  
  414.     sll    %o1, %filec, %o1
  415.     or    %o1, %occupied_lo, %o1
  416.     
  417.     sll    %o0, %filec, %o0
  418.     retl
  419.     or    %o0, %occupied_hi, %o0
  420.  
  421.     .align    4
  422.     .global MobilityRankFunc
  423. MobilityRankFunc:    
  424.     and    %sq, 7, %file
  425.     xnor    %sq, 0, %rankc
  426.     
  427.     and    %rankc, (7 << 3), %rankc
  428.     sll    %file, 1, %temp
  429.     
  430.     add    %file, %temp, %file12
  431.     add     %rankc, 1, %temp
  432.     
  433.     sll    %file, 6, %file
  434.     cmp    %rankc, 32
  435.     blt,a    1f
  436.     add    %boardp, 4, %boardp
  437. 1:    
  438.     sll    %file12, 2, %file12
  439.     ld    [%boardp + W_OCCUPIED], %occupied
  440.  
  441.     sethi    %hi(at), %att
  442.     ld    [%boardp + B_OCCUPIED], %occupied2
  443.     
  444.     or    %occupied, %occupied2, %occupied
  445.     or    %att, %lo(at), %att
  446.     
  447.     ! srl implicitly ands the shift with 0x1f
  448.     srl    %occupied, %temp, %temp
  449.     add    %file, %att, %file
  450.     
  451.     and    %temp, 0x3f, %temp
  452.     add    %file12, %att, %file12
  453.     
  454.     ! add    %temp, %file, %temp
  455.     ! ldub    [%temp + WHICH_ATTACK], %attack_index
  456.     ldub    [%temp + %file], %attack_index
  457.     add    %file12, LEN8_MOBILITY, %file12
  458.     
  459.     retl
  460.     
  461.     ldub    [%attack_index + %file12], %o0
  462.  
  463.     
  464.     .global    MobilityFileFunc
  465. MobilityFileFunc:    
  466.     srl    %sq, 3, %rank
  467.     xnor    %sq, 0, %filec
  468.     
  469.     sll    %rank, 1, %temp
  470.     and    %filec, 7, %filec
  471.     
  472.     add    %rank, %temp, %rank12
  473.     sll    %filec, 3, %temp
  474.  
  475.     add    %temp, 1, %temp
  476.     sll    %rank12, 2, %rank12
  477.     
  478.     sll    %rank, 6, %rank
  479.     cmp    %temp, 32
  480.     blt,a    1f
  481.     add    %boardp, 4, %boardp
  482. 1:    
  483.     sethi    %hi(at), %att
  484.     ld    [%boardp + RL90], %occupied
  485.     
  486.     ! srl implicitly ands the shift with 0x1f
  487.     srl    %occupied, %temp, %temp
  488.     or    %att, %lo(at), %att
  489.     
  490.     and    %temp, 0x3f, %temp
  491.     add    %rank, %att, %rank
  492.     
  493.     ! add    %temp, %rank, %temp
  494.     ! ldub    [%temp + WHICH_ATTACK], %attack_index
  495.     ldub    [%temp + %rank], %attack_index
  496.     add    %rank12, %att, %rank12
  497.  
  498.     add    %rank12, LEN8_MOBILITY, %rank12
  499.     retl
  500.     
  501.     ldub    [%attack_index + %rank12], %o0
  502.     
  503. #undef    sq
  504. #undef boardp
  505. #undef file
  506. #undef temp2
  507. #undef rankc
  508. #undef filec
  509. #undef rank
  510. #undef temp
  511. #undef at
  512. #undef occupied
  513. #undef occupied_hi
  514. #undef occupied_lo
  515. #undef occupied2
  516. #undef attack_index
  517. #undef attack
  518. #undef temp3
  519.