Annotation of quakeworld/server/math.s, revision 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.