home *** CD-ROM | disk | FTP | other *** search
/ Enigma Amiga Life 113 / EnigmaAmiga113CD.iso / software / sviluppo / quake_src / r_bspppc.s < prev    next >
Encoding:
Text File  |  2000-06-17  |  7.5 KB  |  327 lines

  1. # Copyright (C) 1996-1997 Id Software, Inc. 
  2. # This program is free software; you can redistribute it and/or 
  3. # modify it under the terms of the GNU General Public License 
  4. # as published by the Free Software Foundation; either version 2 
  5. # of the License, or (at your option) any later version. 
  6. # This program is distributed in the hope that it will be useful, 
  7. # but WITHOUT ANY WARRANTY; without even the implied warranty of 
  8. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.   
  9. # See the GNU General Public License for more details. 
  10. # You should have received a copy of the GNU General Public License 
  11. # along with this program; if not, write to the Free Software 
  12. # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. 
  13.  
  14. ##
  15. ## Quake for AMIGA
  16. ##
  17. ## r_bspPPC.s
  18. ##
  19. ## Define WOS for PowerOpen ABI, otherwise SVR4-ABI is used.
  20. ##
  21.  
  22. .include        "macrosPPC.i"
  23.  
  24. #
  25. # external references
  26. #
  27.  
  28.     xrefv    r_visframecount
  29.     xrefv    r_framecount
  30.     xrefv    r_currentkey
  31.     xrefv    r_drawpolys
  32.     xrefv    r_worldpolysbacktofront
  33.     xrefv    pbtofpolys
  34.     xrefv    numbtofpolys
  35.     xrefv    pfrustum_indexes
  36.     xrefa    modelorg
  37.     xrefa    vpn
  38.     xrefa    vright
  39.     xrefa    vup
  40.     xrefa    view_clipplanes
  41.     xrefv    currententity
  42.     xrefa    screenedge
  43.     xrefa    entity_rotation
  44.  
  45. .ifdef    __STORM__
  46.     xrefv    sin__r
  47.     xrefv    cos__r
  48. .else
  49.     xrefv    sin
  50.     xrefv    cos
  51. .endif
  52.  
  53. #
  54. # defines
  55. #
  56.  
  57. .set    PITCH                ,0
  58. .set    YAW                  ,1
  59. .set    ROLL                 ,2
  60.  
  61. .set    CLIP_NORMAL          ,0
  62. .set    CLIP_DIST            ,12
  63. .set    CLIP_NEXT            ,16
  64. .set    CLIP_LEFTEDGE        ,20
  65. .set    CLIP_RIGHTEDGE       ,21
  66. .set    CLIP_RESERVED        ,22
  67. .set    CLIP_SIZEOF          ,24
  68.  
  69. .set    MPLANE_NORMAL        ,0
  70. .set    MPLANE_DIST          ,12
  71. .set    MPLANE_TYPE          ,16
  72. .set    MPLANE_SIGNBITS      ,17
  73. .set    MPLANE_SIZEOF        ,20
  74.  
  75. .set    ENTITY_FORCELINK     ,0
  76. .set    ENTITY_UPDATE_TYPE   ,4
  77. .set    ENTITY_BASELINE      ,8
  78. .set    ENTITY_MSGTIME       ,52
  79. .set    ENTITY_MSG_ORIGINS   ,60
  80. .set    ENTITY_ORIGIN        ,84
  81. .set    ENTITY_MSG_ANGLES    ,96
  82. .set    ENTITY_ANGLES        ,120
  83. .set    ENTITY_MODEL         ,132
  84. .set    ENTITY_EFRAG         ,136
  85. .set    ENTITY_FRAME         ,140
  86. .set    ENTITY_SYNCBASE      ,144
  87. .set    ENTITY_COLORMAP      ,148
  88. .set    ENTITY_EFFECTS       ,152
  89. .set    ENTITY_SKINNUM       ,156
  90. .set    ENTITY_VISFRAME      ,160
  91. .set    ENTITY_DLIGHTFRAME   ,164
  92. .set    ENTITY_DLIGHTBITS    ,168
  93. .set    ENTITY_TRIVIAL_ACCEPT,172
  94. .set    ENTITY_TOPNODE       ,176
  95. .set    ENTITY_SIZEOF        ,216
  96.  
  97.  
  98.  
  99.  
  100.  
  101. ###########################################################################
  102. #
  103. #       void R_RotateBmodel (void)
  104. #
  105. ###########################################################################
  106.  
  107.     funcdef    R_RotateBmodel
  108.  
  109.     init    0,0,1,18
  110.     stw    r31,gb(r1)
  111.     stfd    f14,fb+0*8(r1)
  112.     stfd    f15,fb+1*8(r1)
  113.     stfd    f16,fb+2*8(r1)
  114.     stfd    f17,fb+3*8(r1)
  115.     stfd    f18,fb+4*8(r1)
  116.     stfd    f19,fb+5*8(r1)
  117.     stfd    f20,fb+6*8(r1)
  118.     stfd    f21,fb+7*8(r1)
  119.     stfd    f22,fb+8*8(r1)
  120.     stfd    f23,fb+9*8(r1)
  121.     stfd    f24,fb+10*8(r1)
  122.     stfd    f25,fb+11*8(r1)
  123.     stfd    f26,fb+12*8(r1)
  124.     stfd    f27,fb+13*8(r1)
  125.     stfd    f28,fb+14*8(r1)
  126.     stfd    f29,fb+15*8(r1)
  127.     stfd    f30,fb+16*8(r1)
  128.     stfd    f31,fb+17*8(r1)
  129.  
  130.     ls      f14,cPI
  131.     lw      r31,currententity
  132.     lfs     f1,ENTITY_ANGLES+YAW*4(r31)
  133.     fmuls   f15,f1,f14
  134.     fmr     f1,f15
  135.     mcall    sin
  136.     fmr     f16,f1                  #f16 = s [YAW]
  137.     fmr     f1,f15
  138.     mcall    cos
  139.     fmr     f17,f1                  #f17 = c [YAW]
  140.     lfs     f1,ENTITY_ANGLES+PITCH*4(r31)
  141.     fmuls   f15,f1,f14
  142.     fmr     f1,f15
  143.     mcall    sin
  144.     fmr     f18,f1                  #f18 = s [PITCH]
  145.     fmr     f1,f15
  146.     mcall    cos
  147.     fmr     f19,f1                  #f19 = c [PITCH] = 32(a2)
  148.     lfs     f1,ENTITY_ANGLES+ROLL*4(r31)
  149.     fmuls   f15,f1,f14
  150.     fmr     f1,f15
  151.     mcall    sin
  152.     fmr     f20,f1                  #f20 = s [ROLL]
  153.     fmr     f1,f15
  154.     mcall    cos
  155.     fmuls   f0,f17,f19
  156.     fmr     f15,f1                  #f15 = c [ROLL]
  157.     lxa     r3,entity_rotation     #r3 = entity_rotation
  158.     stfs    f0,0(r3)                #f0 = entity_rotation [0,0]
  159.     fmuls   f1,f16,f19              #f1 = 4(a2)
  160.     fneg    f2,f18                  #f2 = 8(a2)
  161.     fneg    f3,f16
  162.     fmuls   f4,f17,f18
  163.     stfs    f3,12(r3)               #f3 = entity_rotation[1,0]
  164.     stfs    f4,24(r3)               #f4 = entity_rotation[2,0]
  165.     fmuls   f5,f16,f18              #f5 = 28(a2)
  166.     fmuls   f6,f20,f2
  167.     fmsubs  f7,f15,f1,f6
  168.     fmuls   f8,f20,f1
  169.     stfs    f7,4(r3)                #f7 = entity_rotation[0,1]
  170.     fmuls   f12,f20,f19
  171.     fmadds  f9,f2,f15,f8
  172.     fmuls   f10,f17,f15
  173.     stfs    f9,8(r3)                #f9 = entity_rotation[0,2]
  174.     stfs    f10,16(r3)              #f10 = entity_rotation[1,1]
  175.     fmuls   f2,f19,f15
  176.     fmuls   f11,f17,f20
  177.     fmsubs  f13,f15,f5,f12
  178.     stfs    f11,20(r3)              #f11 = entity_rotation[1,2]
  179.     stfs    f13,28(r3)              #f13 = entity_rotation[2,1]
  180.     fmadds  f1,f20,f5,f2
  181.     stfs    f1,32(r3)               #f1 = entity_rotation[2,2]
  182.     lxa     r7,modelorg
  183.     lfs     f19,0(r7)               #f19 = modelorg[0]
  184.     lfs     f20,4(r7)               #f20 = modelorg[1]
  185.     lfs     f21,8(r7)               #f21 = modelorg[2]
  186.     lxa     r4,vpn
  187.     lfs     f2,0(r4)                #f2 = vpn[0]
  188.     lfs     f6,4(r4)                #f6 = vpn[1]
  189.     lfs     f8,8(r4)                #f8 = vpn[2]
  190.     lxa     r5,vright
  191.     lfs     f12,0(r5)               #f12 = vright[0]
  192.     lfs     f14,4(r5)               #f14 = vright[1]
  193.     lfs     f15,8(r5)               #f15 = vright[2]
  194.     lxa     r6,vup
  195.     lfs     f16,0(r6)               #f16 = vup[0]
  196.     lfs     f17,4(r6)               #f17 = vup[1]
  197.     lfs     f18,8(r6)               #f18 = vup[2]
  198.  
  199.     fmuls   f22,f19,f0
  200.     fmuls   f25,f2,f0
  201.     fmuls   f28,f12,f0
  202.     fmuls   f31,f16,f0
  203.     fmadds  f22,f20,f7,f22
  204.     fmadds  f25,f6,f7,f25
  205.     fmadds  f28,f14,f7,f28
  206.     fmadds  f31,f17,f7,f31
  207.     fmadds  f22,f21,f9,f22
  208.     fmadds  f25,f8,f9,f25
  209.     fmadds  f28,f15,f9,f28
  210.     fmadds  f31,f18,f9,f31
  211.     fmuls   f23,f19,f3
  212.     fmuls   f26,f2,f3
  213.     fmuls   f29,f12,f3
  214.     fmuls   f0,f16,f3
  215.     fmadds  f23,f20,f10,f23
  216.     fmadds  f26,f6,f10,f26
  217.     fmadds  f29,f14,f10,f29
  218.     fmadds  f0,f17,f10,f0
  219.     fmadds  f23,f21,f11,f23
  220.     fmadds  f26,f8,f11,f26
  221.     fmadds  f29,f15,f11,f29
  222.     fmadds  f0,f18,f11,f0
  223.     fmuls   f24,f19,f4
  224.     fmuls   f27,f2,f4
  225.     fmuls   f30,f12,f4
  226.     fmuls   f7,f16,f4
  227.     fmadds  f24,f20,f13,f24
  228.     fmadds  f27,f6,f13,f27
  229.     fmadds  f30,f14,f13,f30
  230.     fmadds  f7,f17,f13,f7
  231.     fmadds  f21,f21,f1,f24
  232.     fmadds  f8,f8,f1,f27
  233.     fmadds  f15,f15,f1,f30
  234.     fmadds  f18,f18,f1,f7
  235.     fmr     f19,f22
  236.     fmr     f2,f25
  237.     fmr     f12,f28
  238.     fmr     f16,f31
  239.     fmr     f20,f23
  240.     fmr     f6,f26
  241.     fmr     f14,f29
  242.     fmr     f17,f0
  243.  
  244.     li      r0,4
  245.     mtctr   r0
  246.     lxa     r8,screenedge
  247.     subi    r8,r8,4
  248.     lxa     r9,view_clipplanes
  249.     subi    r9,r9,4
  250. .loop:
  251.     lfsu    f0,4(r8)
  252.     lfsu    f7,4(r8)
  253.     lfsu    f9,4(r8)
  254.     fmuls   f3,f16,f7
  255.     fmuls   f10,f17,f7
  256.     fmuls   f11,f18,f7
  257.     fmadds  f3,f2,f9,f3
  258.     fmadds  f10,f6,f9,f10
  259.     fmadds  f11,f8,f9,f11
  260.     fnmsubs f3,f12,f0,f3
  261.     stfsu   f3,4(r9)
  262.     fmuls   f3,f3,f19
  263.     fnmsubs f10,f14,f0,f10
  264.     stfsu   f10,4(r9)
  265.     fmadds  f3,f10,f20,f3
  266.     fnmsubs f11,f15,f0,f11
  267.     stfsu   f11,4(r9)
  268.     fmadds  f3,f11,f21,f3
  269.     la      r8,MPLANE_SIZEOF-12(r8)
  270.     stfsu   f3,4(r9)
  271.     la      r9,CLIP_SIZEOF-16(r9)
  272.     bdnz    .loop
  273.  
  274.     stfs    f19,0(r7)
  275.     stfs    f20,4(r7)
  276.     stfs    f21,8(r7)
  277.     stfs    f2,0(r4)
  278.     stfs    f6,4(r4)
  279.     stfs    f8,8(r4)
  280.     stfs    f12,0(r5)
  281.     stfs    f14,4(r5)
  282.     stfs    f15,8(r5)
  283.     stfs    f16,0(r6)
  284.     stfs    f17,4(r6)
  285.     stfs    f18,8(r6)
  286.  
  287.     lfd    f14,fb+0*8(r1)
  288.     lfd    f15,fb+1*8(r1)
  289.     lfd    f16,fb+2*8(r1)
  290.     lfd    f17,fb+3*8(r1)
  291.     lfd    f18,fb+4*8(r1)
  292.     lfd    f19,fb+5*8(r1)
  293.     lfd    f20,fb+6*8(r1)
  294.     lfd    f21,fb+7*8(r1)
  295.     lfd    f22,fb+8*8(r1)
  296.     lfd    f23,fb+9*8(r1)
  297.     lfd    f24,fb+10*8(r1)
  298.     lfd    f25,fb+11*8(r1)
  299.     lfd    f26,fb+12*8(r1)
  300.     lfd    f27,fb+13*8(r1)
  301.     lfd    f28,fb+14*8(r1)
  302.     lfd    f29,fb+15*8(r1)
  303.     lfd    f30,fb+16*8(r1)
  304.     lfd    f31,fb+17*8(r1)
  305.     lwz    r31,gb(r1)
  306.     exit
  307.  
  308.     funcend    R_RotateBmodel
  309.  
  310.  
  311.  
  312.  
  313. .ifdef    WOS
  314.     .tocd
  315. .else
  316.     .data
  317. .endif
  318.  
  319. lab cPI
  320.     .float    0.017453293        # => M_PI*2/360
  321.