Annotation of quakeworld/server/math.s, revision 1.1.1.1

1.1       root        1: //
                      2: // math.s
                      3: // x86 assembly-language math routines.
                      4: 
                      5: #include "asm_i386.h"
                      6: #include "quakeasm.h"
                      7: 
                      8: 
                      9: #if id386
                     10: 
                     11:        .data
                     12: 
                     13:        .align  4
                     14: Ljmptab:       .long   Lcase0, Lcase1, Lcase2, Lcase3
                     15:                        .long   Lcase4, Lcase5, Lcase6, Lcase7
                     16: 
                     17:        .text
                     18: 
                     19: 
                     20: #define EMINS  4+4
                     21: #define EMAXS  4+8
                     22: #define P              4+12
                     23: 
                     24:        .align 2
                     25: .globl C(BoxOnPlaneSide)
                     26: C(BoxOnPlaneSide):
                     27:        pushl   %ebx
                     28: 
                     29:        movl    P(%esp),%edx
                     30:        movl    EMINS(%esp),%ecx
                     31:        xorl    %eax,%eax
                     32:        movl    EMAXS(%esp),%ebx
                     33:        movb    pl_signbits(%edx),%al
                     34:        cmpl    $8,%al
                     35:        jge             Lerror
                     36:        flds    pl_normal(%edx)         // p->normal[0]
                     37:        fld             %st(0)                          // p->normal[0] | p->normal[0]
                     38:        jmp             *Ljmptab(,%eax,4)
                     39: 
                     40: 
                     41: //dist1= p->normal[0]*emaxs[0] + p->normal[1]*emaxs[1] + p->normal[2]*emaxs[2];
                     42: //dist2= p->normal[0]*emins[0] + p->normal[1]*emins[1] + p->normal[2]*emins[2];
                     43: Lcase0:
                     44:        fmuls   (%ebx)                          // p->normal[0]*emaxs[0] | p->normal[0]
                     45:        flds    pl_normal+4(%edx)       // p->normal[1] | p->normal[0]*emaxs[0] |
                     46:                                                                //  p->normal[0]
                     47:        fxch    %st(2)                          // p->normal[0] | p->normal[0]*emaxs[0] |
                     48:                                                                //  p->normal[1]
                     49:        fmuls   (%ecx)                          // p->normal[0]*emins[0] |
                     50:                                                                //  p->normal[0]*emaxs[0] | p->normal[1]
                     51:        fxch    %st(2)                          // p->normal[1] | p->normal[0]*emaxs[0] |
                     52:                                                                //  p->normal[0]*emins[0]
                     53:        fld             %st(0)                          // p->normal[1] | p->normal[1] |
                     54:                                                                //  p->normal[0]*emaxs[0] |
                     55:                                                                //  p->normal[0]*emins[0]
                     56:        fmuls   4(%ebx)                         // p->normal[1]*emaxs[1] | p->normal[1] |
                     57:                                                                //  p->normal[0]*emaxs[0] |
                     58:                                                                //  p->normal[0]*emins[0]
                     59:        flds    pl_normal+8(%edx)       // p->normal[2] | p->normal[1]*emaxs[1] |
                     60:                                                                //  p->normal[1] | p->normal[0]*emaxs[0] |
                     61:                                                                //  p->normal[0]*emins[0]
                     62:        fxch    %st(2)                          // p->normal[1] | p->normal[1]*emaxs[1] |
                     63:                                                                //  p->normal[2] | p->normal[0]*emaxs[0] |
                     64:                                                                //  p->normal[0]*emins[0]
                     65:        fmuls   4(%ecx)                         // p->normal[1]*emins[1] |
                     66:                                                                //  p->normal[1]*emaxs[1] |
                     67:                                                                //  p->normal[2] | p->normal[0]*emaxs[0] |
                     68:                                                                //  p->normal[0]*emins[0]
                     69:        fxch    %st(2)                          // p->normal[2] | p->normal[1]*emaxs[1] |
                     70:                                                                //  p->normal[1]*emins[1] |
                     71:                                                                //  p->normal[0]*emaxs[0] |
                     72:                                                                //  p->normal[0]*emins[0]
                     73:        fld             %st(0)                          // p->normal[2] | p->normal[2] |
                     74:                                                                //  p->normal[1]*emaxs[1] |
                     75:                                                                //  p->normal[1]*emins[1] |
                     76:                                                                //  p->normal[0]*emaxs[0] |
                     77:                                                                //  p->normal[0]*emins[0]
                     78:        fmuls   8(%ebx)                         // p->normal[2]*emaxs[2] |
                     79:                                                                //  p->normal[2] |
                     80:                                                                //  p->normal[1]*emaxs[1] |
                     81:                                                                //  p->normal[1]*emins[1] |
                     82:                                                                //  p->normal[0]*emaxs[0] |
                     83:                                                                //  p->normal[0]*emins[0]
                     84:        fxch    %st(5)                          // p->normal[0]*emins[0] |
                     85:                                                                //  p->normal[2] |
                     86:                                                                //  p->normal[1]*emaxs[1] |
                     87:                                                                //  p->normal[1]*emins[1] |
                     88:                                                                //  p->normal[0]*emaxs[0] |
                     89:                                                                //  p->normal[2]*emaxs[2]
                     90:        faddp   %st(0),%st(3)           //p->normal[2] |
                     91:                                                                // p->normal[1]*emaxs[1] |
                     92:                                                                // p->normal[1]*emins[1]+p->normal[0]*emins[0]|
                     93:                                                                // p->normal[0]*emaxs[0] |
                     94:                                                                // p->normal[2]*emaxs[2]
                     95:        fmuls   8(%ecx)                         //p->normal[2]*emins[2] |
                     96:                                                                // p->normal[1]*emaxs[1] |
                     97:                                                                // p->normal[1]*emins[1]+p->normal[0]*emins[0]|
                     98:                                                                // p->normal[0]*emaxs[0] |
                     99:                                                                // p->normal[2]*emaxs[2]
                    100:        fxch    %st(1)                          //p->normal[1]*emaxs[1] |
                    101:                                                                // p->normal[2]*emins[2] |
                    102:                                                                // p->normal[1]*emins[1]+p->normal[0]*emins[0]|
                    103:                                                                // p->normal[0]*emaxs[0] |
                    104:                                                                // p->normal[2]*emaxs[2]
                    105:        faddp   %st(0),%st(3)           //p->normal[2]*emins[2] |
                    106:                                                                // p->normal[1]*emins[1]+p->normal[0]*emins[0]|
                    107:                                                                // p->normal[0]*emaxs[0]+p->normal[1]*emaxs[1]|
                    108:                                                                // p->normal[2]*emaxs[2]
                    109:        fxch    %st(3)                          //p->normal[2]*emaxs[2] +
                    110:                                                                // p->normal[1]*emins[1]+p->normal[0]*emins[0]|
                    111:                                                                // p->normal[0]*emaxs[0]+p->normal[1]*emaxs[1]|
                    112:                                                                // p->normal[2]*emins[2]
                    113:        faddp   %st(0),%st(2)           //p->normal[1]*emins[1]+p->normal[0]*emins[0]|
                    114:                                                                // dist1 | p->normal[2]*emins[2]
                    115: 
                    116:        jmp             LSetSides
                    117: 
                    118: //dist1= p->normal[0]*emins[0] + p->normal[1]*emaxs[1] + p->normal[2]*emaxs[2];
                    119: //dist2= p->normal[0]*emaxs[0] + p->normal[1]*emins[1] + p->normal[2]*emins[2];
                    120: Lcase1:
                    121:        fmuls   (%ecx)                          // emins[0]
                    122:        flds    pl_normal+4(%edx)
                    123:        fxch    %st(2)
                    124:        fmuls   (%ebx)                          // emaxs[0]
                    125:        fxch    %st(2)
                    126:        fld             %st(0)
                    127:        fmuls   4(%ebx)                         // emaxs[1]
                    128:        flds    pl_normal+8(%edx)
                    129:        fxch    %st(2)
                    130:        fmuls   4(%ecx)                         // emins[1]
                    131:        fxch    %st(2)
                    132:        fld             %st(0)
                    133:        fmuls   8(%ebx)                         // emaxs[2]
                    134:        fxch    %st(5)
                    135:        faddp   %st(0),%st(3)
                    136:        fmuls   8(%ecx)                         // emins[2]
                    137:        fxch    %st(1)
                    138:        faddp   %st(0),%st(3)
                    139:        fxch    %st(3)
                    140:        faddp   %st(0),%st(2)
                    141: 
                    142:        jmp             LSetSides
                    143: 
                    144: //dist1= p->normal[0]*emaxs[0] + p->normal[1]*emins[1] + p->normal[2]*emaxs[2];
                    145: //dist2= p->normal[0]*emins[0] + p->normal[1]*emaxs[1] + p->normal[2]*emins[2];
                    146: Lcase2:
                    147:        fmuls   (%ebx)                          // emaxs[0]
                    148:        flds    pl_normal+4(%edx)
                    149:        fxch    %st(2)
                    150:        fmuls   (%ecx)                          // emins[0]
                    151:        fxch    %st(2)
                    152:        fld             %st(0)
                    153:        fmuls   4(%ecx)                         // emins[1]
                    154:        flds    pl_normal+8(%edx)
                    155:        fxch    %st(2)
                    156:        fmuls   4(%ebx)                         // emaxs[1]
                    157:        fxch    %st(2)
                    158:        fld             %st(0)
                    159:        fmuls   8(%ebx)                         // emaxs[2]
                    160:        fxch    %st(5)
                    161:        faddp   %st(0),%st(3)
                    162:        fmuls   8(%ecx)                         // emins[2]
                    163:        fxch    %st(1)
                    164:        faddp   %st(0),%st(3)
                    165:        fxch    %st(3)
                    166:        faddp   %st(0),%st(2)
                    167: 
                    168:        jmp             LSetSides
                    169: 
                    170: //dist1= p->normal[0]*emins[0] + p->normal[1]*emins[1] + p->normal[2]*emaxs[2];
                    171: //dist2= p->normal[0]*emaxs[0] + p->normal[1]*emaxs[1] + p->normal[2]*emins[2];
                    172: Lcase3:
                    173:        fmuls   (%ecx)                          // emins[0]
                    174:        flds    pl_normal+4(%edx)
                    175:        fxch    %st(2)
                    176:        fmuls   (%ebx)                          // emaxs[0]
                    177:        fxch    %st(2)
                    178:        fld             %st(0)
                    179:        fmuls   4(%ecx)                         // emins[1]
                    180:        flds    pl_normal+8(%edx)
                    181:        fxch    %st(2)
                    182:        fmuls   4(%ebx)                         // emaxs[1]
                    183:        fxch    %st(2)
                    184:        fld             %st(0)
                    185:        fmuls   8(%ebx)                         // emaxs[2]
                    186:        fxch    %st(5)
                    187:        faddp   %st(0),%st(3)
                    188:        fmuls   8(%ecx)                         // emins[2]
                    189:        fxch    %st(1)
                    190:        faddp   %st(0),%st(3)
                    191:        fxch    %st(3)
                    192:        faddp   %st(0),%st(2)
                    193: 
                    194:        jmp             LSetSides
                    195: 
                    196: //dist1= p->normal[0]*emaxs[0] + p->normal[1]*emaxs[1] + p->normal[2]*emins[2];
                    197: //dist2= p->normal[0]*emins[0] + p->normal[1]*emins[1] + p->normal[2]*emaxs[2];
                    198: Lcase4:
                    199:        fmuls   (%ebx)                          // emaxs[0]
                    200:        flds    pl_normal+4(%edx)
                    201:        fxch    %st(2)
                    202:        fmuls   (%ecx)                          // emins[0]
                    203:        fxch    %st(2)
                    204:        fld             %st(0)
                    205:        fmuls   4(%ebx)                         // emaxs[1]
                    206:        flds    pl_normal+8(%edx)
                    207:        fxch    %st(2)
                    208:        fmuls   4(%ecx)                         // emins[1]
                    209:        fxch    %st(2)
                    210:        fld             %st(0)
                    211:        fmuls   8(%ecx)                         // emins[2]
                    212:        fxch    %st(5)
                    213:        faddp   %st(0),%st(3)
                    214:        fmuls   8(%ebx)                         // emaxs[2]
                    215:        fxch    %st(1)
                    216:        faddp   %st(0),%st(3)
                    217:        fxch    %st(3)
                    218:        faddp   %st(0),%st(2)
                    219: 
                    220:        jmp             LSetSides
                    221: 
                    222: //dist1= p->normal[0]*emins[0] + p->normal[1]*emaxs[1] + p->normal[2]*emins[2];
                    223: //dist2= p->normal[0]*emaxs[0] + p->normal[1]*emins[1] + p->normal[2]*emaxs[2];
                    224: Lcase5:
                    225:        fmuls   (%ecx)                          // emins[0]
                    226:        flds    pl_normal+4(%edx)
                    227:        fxch    %st(2)
                    228:        fmuls   (%ebx)                          // emaxs[0]
                    229:        fxch    %st(2)
                    230:        fld             %st(0)
                    231:        fmuls   4(%ebx)                         // emaxs[1]
                    232:        flds    pl_normal+8(%edx)
                    233:        fxch    %st(2)
                    234:        fmuls   4(%ecx)                         // emins[1]
                    235:        fxch    %st(2)
                    236:        fld             %st(0)
                    237:        fmuls   8(%ecx)                         // emins[2]
                    238:        fxch    %st(5)
                    239:        faddp   %st(0),%st(3)
                    240:        fmuls   8(%ebx)                         // emaxs[2]
                    241:        fxch    %st(1)
                    242:        faddp   %st(0),%st(3)
                    243:        fxch    %st(3)
                    244:        faddp   %st(0),%st(2)
                    245: 
                    246:        jmp             LSetSides
                    247: 
                    248: //dist1= p->normal[0]*emaxs[0] + p->normal[1]*emins[1] + p->normal[2]*emins[2];
                    249: //dist2= p->normal[0]*emins[0] + p->normal[1]*emaxs[1] + p->normal[2]*emaxs[2];
                    250: Lcase6:
                    251:        fmuls   (%ebx)                          // emaxs[0]
                    252:        flds    pl_normal+4(%edx)
                    253:        fxch    %st(2)
                    254:        fmuls   (%ecx)                          // emins[0]
                    255:        fxch    %st(2)
                    256:        fld             %st(0)
                    257:        fmuls   4(%ecx)                         // emins[1]
                    258:        flds    pl_normal+8(%edx)
                    259:        fxch    %st(2)
                    260:        fmuls   4(%ebx)                         // emaxs[1]
                    261:        fxch    %st(2)
                    262:        fld             %st(0)
                    263:        fmuls   8(%ecx)                         // emins[2]
                    264:        fxch    %st(5)
                    265:        faddp   %st(0),%st(3)
                    266:        fmuls   8(%ebx)                         // emaxs[2]
                    267:        fxch    %st(1)
                    268:        faddp   %st(0),%st(3)
                    269:        fxch    %st(3)
                    270:        faddp   %st(0),%st(2)
                    271: 
                    272:        jmp             LSetSides
                    273: 
                    274: //dist1= p->normal[0]*emins[0] + p->normal[1]*emins[1] + p->normal[2]*emins[2];
                    275: //dist2= p->normal[0]*emaxs[0] + p->normal[1]*emaxs[1] + p->normal[2]*emaxs[2];
                    276: Lcase7:
                    277:        fmuls   (%ecx)                          // emins[0]
                    278:        flds    pl_normal+4(%edx)
                    279:        fxch    %st(2)
                    280:        fmuls   (%ebx)                          // emaxs[0]
                    281:        fxch    %st(2)
                    282:        fld             %st(0)
                    283:        fmuls   4(%ecx)                         // emins[1]
                    284:        flds    pl_normal+8(%edx)
                    285:        fxch    %st(2)
                    286:        fmuls   4(%ebx)                         // emaxs[1]
                    287:        fxch    %st(2)
                    288:        fld             %st(0)
                    289:        fmuls   8(%ecx)                         // emins[2]
                    290:        fxch    %st(5)
                    291:        faddp   %st(0),%st(3)
                    292:        fmuls   8(%ebx)                         // emaxs[2]
                    293:        fxch    %st(1)
                    294:        faddp   %st(0),%st(3)
                    295:        fxch    %st(3)
                    296:        faddp   %st(0),%st(2)
                    297: 
                    298: LSetSides:
                    299: 
                    300: //     sides = 0;
                    301: //     if (dist1 >= p->dist)
                    302: //             sides = 1;
                    303: //     if (dist2 < p->dist)
                    304: //             sides |= 2;
                    305: 
                    306:        faddp   %st(0),%st(2)           // dist1 | dist2
                    307:        fcomps  pl_dist(%edx)
                    308:        xorl    %ecx,%ecx
                    309:        fnstsw  %ax
                    310:        fcomps  pl_dist(%edx)
                    311:        andb    $1,%ah
                    312:        xorb    $1,%ah
                    313:        addb    %ah,%cl
                    314: 
                    315:        fnstsw  %ax
                    316:        andb    $1,%ah
                    317:        addb    %ah,%ah
                    318:        addb    %ah,%cl
                    319: 
                    320: //     return sides;
                    321: 
                    322:        popl    %ebx
                    323:        movl    %ecx,%eax       // return status
                    324: 
                    325:        ret
                    326: 
                    327: 
                    328: Lerror:
                    329:        call    C(BOPS_Error)
                    330: 
                    331: #endif // id386

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.