int main(int argc, char **argv) { BuildCtx ctx_; BuildCtx *ctx = &ctx_; int status, binmode; if (sizeof(void *) != 4*LJ_32+8*LJ_64) { fprintf(stderr,"Error: pointer size mismatch in cross-build.\n"); fprintf(stderr,"Try: make HOST_CC=\"gcc -m32\" CROSS=...\n\n"); return 1; } UNUSED(argc); parseargs(ctx, argv); if ((status = build_code(ctx))) { fprintf(stderr,"Error: DASM error %08x\n", status); return 1; } switch (ctx->mode) { case BUILD_peobj: case BUILD_raw: binmode = 1; break; default: binmode = 0; break; } if (ctx->outname[0] == '-' && ctx->outname[1] == '\0') { ctx->fp = stdout; #if defined(_WIN32) if (binmode) _setmode(_fileno(stdout), _O_BINARY); /* Yuck. */ #endif } else if (!(ctx->fp = fopen(ctx->outname, binmode ? "wb" : "w"))) { fprintf(stderr, "Error: cannot open output file '%s': %s\n", ctx->outname, strerror(errno)); exit(1); } switch (ctx->mode) { case BUILD_elfasm: case BUILD_coffasm: case BUILD_machasm: emit_asm(ctx); emit_asm_debug(ctx); break; case BUILD_peobj: emit_peobj(ctx); break; case BUILD_raw: emit_raw(ctx); break; case BUILD_bcdef: emit_bcdef(ctx); emit_lib(ctx); break; case BUILD_vmdef: emit_vmdef(ctx); emit_lib(ctx); break; case BUILD_ffdef: case BUILD_libdef: case BUILD_recdef: emit_lib(ctx); break; case BUILD_folddef: emit_fold(ctx); break; default: break; } fflush(ctx->fp); if (ferror(ctx->fp)) { fprintf(stderr, "Error: cannot write to output file: %s\n", strerror(errno)); exit(1); } fclose(ctx->fp); return 0; }
Word16 code_2i40_9bits( Word16 subNr, /* i : subframe number */ Word16 x[], /* i : target vector */ Word16 h[], /* i : impulse response of weighted synthesis */ /* filter h[-L_subfr..-1] must be set to 0. */ Word16 T0, /* i : Pitch lag */ Word16 pitch_sharp, /* i : Last quantized pitch gain */ Word16 code[], /* o : Innovative codebook */ Word16 y[], /* o : filtered fixed codebook excitation */ Word16 * sign, /* o : Signs of 2 pulses */ Flag * pOverflow /* o : Flag set when overflow occurs */ ) { Word16 codvec[NB_PULSE]; Word16 dn[L_CODE]; Word16 dn2[L_CODE]; Word16 dn_sign[L_CODE]; Word16 rr[L_CODE][L_CODE]; register Word16 i; Word16 index; Word16 sharp; Word16 temp; Word32 L_temp; L_temp = ((Word32) pitch_sharp) << 1; /* Check for overflow condition */ if (L_temp != (Word32)((Word16) L_temp)) { *(pOverflow) = 1; sharp = (pitch_sharp > 0) ? MAX_16 : MIN_16; } else { sharp = (Word16) L_temp; } if (T0 < L_CODE) { for (i = T0; i < L_CODE; i++) { temp = mult( *(h + i - T0), sharp, pOverflow); *(h + i) = add( *(h + i), temp, pOverflow); } } cor_h_x( h, x, dn, 1, pOverflow); /* dn2[] not used in this codebook search */ set_sign( dn, dn_sign, dn2, 8); cor_h( h, dn_sign, rr, pOverflow); search_2i40( subNr, dn, rr, codvec, pOverflow); index = build_code( subNr, codvec, dn_sign, code, h, y, sign, pOverflow); /*-----------------------------------------------------------------* * Compute innovation vector gain. * * Include fixed-gain pitch contribution into code[]. * *-----------------------------------------------------------------*/ if (T0 < L_CODE) { for (i = T0; i < L_CODE; i++) { temp = mult( *(code + i - T0), sharp, pOverflow); *(code + i) = add( *(code + i), temp, pOverflow); } } return(index); }