[FFmpeg-trac] #1466(avutil:new): FASTDIV macro incorrect for constant propogation

FFmpeg trac at avcodec.org
Tue Jun 19 10:26:29 CEST 2012


#1466: FASTDIV macro incorrect for constant propogation
-------------------------------------+-------------------------------------
               Reporter:  yang       |                  Owner:  michael
                   Type:  defect     |                 Status:  new
               Priority:  normal     |              Component:  avutil
                Version:             |               Keywords:  FFMPEG
  unspecified                        |  FASTDIV mul type mismatch
             Blocked By:             |               Blocking:
Reproduced by developer:  0          |  Analyzed by developer:  0
-------------------------------------+-------------------------------------
 Summary of the bug:
 In file libavutil/x86/intmath.h, around line 30
 "g"(ff_inverse[b])\
 In above line, "g" need be replaced by "rm".
 Otherwise, if "ff_inverse[b]" is a constant and propogate to "mull"
 instruction by compiler optimization, the "mull" instruction will become a
 invalid instruction and the compilation will fail.

 How to reproduce:
 in folder libavutil/x86 folder, write a simple test case as following:
 #include "intmath.h"
 int main()
 {
    int ff_inverse[2]={1,2};
    int x = 8;
    int r = FASTDIV(x,0);
    return r;
 }

 compile: gcc test.c -O2
 test.c: Assembler messages:
 test.c:7: Error: operand type mismatch for "mul"

 The operand to the mul instruction can be either register or memory, not
 an immediate.

 This bug will cause Intel C++ compiler compilation failed when IPO
 optimization is enabled.

-- 
Ticket URL: <https://ffmpeg.org/trac/ffmpeg/ticket/1466>
FFmpeg <http://ffmpeg.org>
FFmpeg issue tracker


More information about the FFmpeg-trac mailing list