From: Astar <As...@tu...> - 2003-05-29 23:43:37
|
Hi, to All. I have strange Error while compiling asm-code: float asm_arccos( float r ) { float asm_one = 1.f; float asm_half_pi = half_pi; float out = 0; asm( "fld %1;" "fld %%st;" "fmul %%st;" "fsubr %2;" "fsqrt;" "fdiv %%st(1),%%st;" "fld1;" "fpatan;" "fstp %0;" : "=g" (out) : "g" (r), "g" (asm_one), "g" (asm_half_pi) : "st", "st(1)" ); return out; } if I compile without any optimizing key, its OK! but when i add -O3 (1/2/3 - any) a have next error: c:\Temp\/ccEpaaaa.s: Assembler messages: c:\Temp\/ccEpaaaa.s:89: Error: suffix or operands invalid for `fstp' WHY??? I use gcc - 3.2 (mingw special version 20020817-1) my makefile (part): OBJ = main.o tablmath.o asm_math.o LINKOBJ = main.o tablmath.o asm_math.o LIBS = -L"$(MINGW_DIR)/lib" -mwindows INCS = -I"$(MINGW_DIR)/include" CXXINCS = -I"$(MINGW_DIR)/include/c++" -I"$(MINGW_DIR)/include/c++/mingw32" -I"$(MINGW_DIR)/include/c++/backward" -I"$(MINGW_DIR)/include/" BIN = test_trigonom.exe OPTIMIZEFLAGS = -O3 DEBUGFLAGS = -g3 -ggdb CXXFLAGS = $(CXXINCS) $(OPTIMIZEFLAGS) .PHONY: all all-before all-after clean clean-custom all: all-before $(BIN) all-after clean: clean-custom rm -f $(OBJ) $(BIN) $(BIN): $(LINKOBJ) $(CPP) $(LINKOBJ) -o $(BIN) $(LIBS) main.o: main.cpp $(CPP) -c main.cpp -o main.o $(CXXFLAGS) tablmath.o: tablmath.cpp $(CPP) -c tablmath.cpp -o tablmath.o $(CXXFLAGS) asm_math.o: asm_math.cpp $(CPP) -c asm_math.cpp -o asm_math.o $(CXXFLAGS) -- Good Luck, Astar mailto:As...@tu... |
From: Luke D. <cod...@ho...> - 2003-05-30 01:51:32
|
Use the -S or -save-temps flag with GCC to see the generated assembler output. My guess is that you need to change "=g" to a different constraint but I don't really know (maybe "=m"). Luke ----- Original Message ----- From: "Astar" <As...@tu...> To: <min...@li...> Sent: Friday, May 30, 2003 7:41 AM Subject: [Mingw-users] asm with optimizing > Hi, to All. > I have strange Error while compiling asm-code: > > float asm_arccos( float r ) { > float asm_one = 1.f; > float asm_half_pi = half_pi; > float out = 0; > > asm( > "fld %1;" > "fld %%st;" > "fmul %%st;" > "fsubr %2;" > "fsqrt;" > "fdiv %%st(1),%%st;" > "fld1;" > "fpatan;" > "fstp %0;" > : "=g" (out) > : "g" (r), "g" (asm_one), "g" (asm_half_pi) > : "st", "st(1)" > ); > return out; > } > > if I compile without any optimizing key, its OK! > but when i add -O3 (1/2/3 - any) a have next error: > > c:\Temp\/ccEpaaaa.s: Assembler messages: > c:\Temp\/ccEpaaaa.s:89: Error: suffix or operands invalid for `fstp' > > WHY??? > > I use > gcc - 3.2 (mingw special version 20020817-1) > > my makefile (part): > > OBJ = main.o tablmath.o asm_math.o > LINKOBJ = main.o tablmath.o asm_math.o > LIBS = -L"$(MINGW_DIR)/lib" -mwindows > INCS = -I"$(MINGW_DIR)/include" > CXXINCS -I"$(MINGW_DIR)/include/c++" -I"$(MINGW_DIR)/include/c++/mingw32" -I"$(M INGW_DIR)/include/c++/backward" -I"$(MINGW_DIR)/include/" > BIN = test_trigonom.exe > OPTIMIZEFLAGS = -O3 > DEBUGFLAGS = -g3 -ggdb > CXXFLAGS = $(CXXINCS) $(OPTIMIZEFLAGS) > > .PHONY: all all-before all-after clean clean-custom > all: all-before $(BIN) all-after > clean: clean-custom > rm -f $(OBJ) $(BIN) > $(BIN): $(LINKOBJ) > $(CPP) $(LINKOBJ) -o $(BIN) $(LIBS) > main.o: main.cpp > $(CPP) -c main.cpp -o main.o $(CXXFLAGS) > tablmath.o: tablmath.cpp > $(CPP) -c tablmath.cpp -o tablmath.o $(CXXFLAGS) > asm_math.o: asm_math.cpp > $(CPP) -c asm_math.cpp -o asm_math.o $(CXXFLAGS) > > -- > Good Luck, > Astar mailto:As...@tu... |
From: Astar <As...@tu...> - 2003-05-31 21:12:25
|
Hello Luke, Friday, May 30, 2003, 4:51:25 AM, you wrote: LD> Use the -S or -save-temps flag with GCC to see the generated assembler LD> output. My guess is that you need to change "=g" to a different constraint LD> but I don't really know (maybe "=m"). LD> Luke thanks a lot. -S don't work, cause its file contains error and gcc doesn't create temporary file. But "=m" and other variables with "m" helps me >> Hi, to All. >> I have strange Error while compiling asm-code: >> >> float asm_arccos( float r ) { >> float asm_one = 1.f; >> float asm_half_pi = half_pi; >> float out = 0; >> >> asm( >> "fld %1;" >> "fld %%st;" >> "fmul %%st;" >> "fsubr %2;" >> "fsqrt;" >> "fdiv %%st(1),%%st;" >> "fld1;" >> "fpatan;" >> "fstp %0;" >> : "=g" (out) >> : "g" (r), "g" (asm_one), "g" (asm_half_pi) >> : "st", "st(1)" >> ); >> return out; >> } >> >> if I compile without any optimizing key, its OK! >> but when i add -O3 (1/2/3 - any) a have next error: >> >> c:\Temp\/ccEpaaaa.s: Assembler messages: >> c:\Temp\/ccEpaaaa.s:89: Error: suffix or operands invalid for `fstp' >> >> WHY??? >> >> I use >> gcc - 3.2 (mingw special version 20020817-1) >> >> my makefile (part): >> >> OBJ = main.o tablmath.o asm_math.o >> LINKOBJ = main.o tablmath.o asm_math.o >> LIBS = -L"$(MINGW_DIR)/lib" -mwindows >> INCS = -I"$(MINGW_DIR)/include" >> CXXINCS LD> -I"$(MINGW_DIR)/include/c++" -I"$(MINGW_DIR)/include/c++/mingw32" -I"$(M LD> INGW_DIR)/include/c++/backward" -I"$(MINGW_DIR)/include/" >> BIN = test_trigonom.exe >> OPTIMIZEFLAGS = -O3 >> DEBUGFLAGS = -g3 -ggdb >> CXXFLAGS = $(CXXINCS) $(OPTIMIZEFLAGS) >> >> .PHONY: all all-before all-after clean clean-custom >> all: all-before $(BIN) all-after >> clean: clean-custom >> rm -f $(OBJ) $(BIN) >> $(BIN): $(LINKOBJ) >> $(CPP) $(LINKOBJ) -o $(BIN) $(LIBS) >> main.o: main.cpp >> $(CPP) -c main.cpp -o main.o $(CXXFLAGS) >> tablmath.o: tablmath.cpp >> $(CPP) -c tablmath.cpp -o tablmath.o $(CXXFLAGS) >> asm_math.o: asm_math.cpp >> $(CPP) -c asm_math.cpp -o asm_math.o $(CXXFLAGS) -- Best regards, Astar mailto:As...@tu... |