日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

GCC优化选项:一般的文档里不容易找到的-Os

發(fā)布時間:2023/12/9 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GCC优化选项:一般的文档里不容易找到的-Os 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

From: http://hi.baidu.com/ah__fu/item/9287dd5227227c908d12ed50

在研究編譯驅動的makefile的時候,發(fā)現(xiàn)GCC的命令行里面有一個-Os的優(yōu)化選項。
??? 遍查GCC文檔,發(fā)現(xiàn)了-O0, -O1, -O2, -O3,就是沒有發(fā)現(xiàn)-Os。
??? 祭出GOOGLE大法搜了一下,終于發(fā)現(xiàn)這篇文章說明了-Os的作用:
http://www.linuxjournal.com/article/7269

?? 原來-Os相當于-O2.5。是使用了所有-O2的優(yōu)化選項,但又不縮減代碼尺寸的方法。
?? 詳細的說明如下:
Level 2.5 (-Os)

The special optimization level (-Os or size) enables all -O2 optimizations that do not increase code size; it puts the emphasis on size over speed. This includes all second-level optimizations, except for the alignment optimizations. The alignment optimizations skip space to align functions, loops, jumps and labels to an address that is a multiple of a power of two, in an architecture-dependent manner. Skipping to these boundaries can increase performance as well as the size of the resulting code and data spaces; therefore, these particular optimizations are disabled. The size optimization level is enabled as:

gcc -Os -o test test.c

In gcc 3.2.2, reorder-blocks is enabled at -Os, but in gcc 3.3.2 reorder-blocks is disabled.

==============================
補充:在GCC的官方文檔里又發(fā)現(xiàn)了關于-Os的說明:
http://gcc.gnu.org/onlinedocs/gcc-3.4.6/gcc/Optimize-Options.html#Optimize-Options

具體內容如下:


3.10 Options That Control Optimization

These options control various sorts of optimizations.

Without any optimization option, the compiler's goal is to reduce thecost of compilation and to make debugging produce the expectedresults. Statements are independent: if you stop the program with abreakpoint between statements, you can then assign a new value to anyvariable or change the program counter to any other statement in thefunction and get exactly the results you would expect from the sourcecode.

Turning on optimization flags makes the compiler attempt to improvethe performance and/or code size at the expense of compilation timeand possibly the ability to debug the program.

The compiler performs optimization based on the knowledge it has ofthe program. Using the -funit-at-a-time flag will allow thecompiler to consider information gained from later functions in thefile when compiling a function. Compiling multiple files at once to asingle output file (and using -funit-at-a-time) will allowthe compiler to use information gained from all of the files whencompiling each of them.

Not all optimizations are controlled directly by a flag. Onlyoptimizations that have a flag are listed.

-O-O1
Optimize. Optimizing compilation takes somewhat more time, and a lotmore memory for a large function.

With -O, the compiler tries to reduce code size and executiontime, without performing any optimizations that take a great deal ofcompilation time.

-O turns on the following optimization flags:

-fdefer-pop -fmerge-constants -fthread-jumps -floop-optimize -fif-conversion -fif-conversion2 -fdelayed-branch -fguess-branch-probability -fcprop-registers

-O also turns on -fomit-frame-pointer on machineswhere doing so does not interfere with debugging.

-O2
Optimize even more. GCC performs nearly all supported optimizationsthat do not involve a space-speed tradeoff. The compiler does notperform loop unrolling or function inlining when you specify -O2. As compared to -O, this option increases both compilation timeand the performance of the generated code.

-O2 turns on all optimization flags specified by -O. Italso turns on the following optimization flags:

-fforce-mem -foptimize-sibling-calls -fstrength-reduce -fcse-follow-jumps -fcse-skip-blocks -frerun-cse-after-loop -frerun-loop-opt -fgcse -fgcse-lm -fgcse-sm -fgcse-las -fdelete-null-pointer-checks -fexpensive-optimizations -fregmove -fschedule-insns -fschedule-insns2 -fsched-interblock -fsched-spec -fcaller-saves -fpeephole2 -freorder-blocks -freorder-functions -fstrict-aliasing -funit-at-a-time -falign-functions -falign-jumps -falign-loops -falign-labels -fcrossjumping

Please note the warning under -fgcse aboutinvoking -O2 on programs that use computed gotos.

-O3
Optimize yet more. -O3 turns on all optimizations specified by-O2 and also turns on the -finline-functions,-fweb, -frename-registers and -funswitch-loopsoptions.
-O0
Do not optimize. This is the default.
-Os
Optimize for size. -Os enables all -O2 optimizations thatdo not typically increase code size. It also performs furtheroptimizations designed to reduce code size.

-Os disables the following optimization flags:

-falign-functions -falign-jumps -falign-loops -falign-labels -freorder-blocks -fprefetch-loop-arrays

If you use multiple -O options, with or without level numbers,the last such option is the one that is effective.

Options of the form -fflag specify machine-independentflags. Most flags have both positive and negative forms; the negativeform of -ffoo would be -fno-foo. In the tablebelow, only one of the forms is listed—the one you typically willuse. You can figure out the other form by either removing `no-'or adding it.

The following options control specific optimizations. They are eitheractivated by -O options or are related to ones that are. Youcan use the following flags in the rare cases when “fine-tuning” ofoptimizations to be performed is desired.

-fno-default-inline
Do not make member functions inline by default merely because they aredefined inside the class scope (C++ only). Otherwise, when you specify-O, member functions defined inside class scope are compiledinline by default; i.e., you don't need to add `inline' in front ofthe member function name.
-fno-defer-pop
Always pop the arguments to each function call as soon as that functionreturns. For machines which must pop arguments after a function call,the compiler normally lets arguments accumulate on the stack for severalfunction calls and pops them all at once.

Disabled at levels -O, -O2, -O3, -Os.

-fforce-mem
Force memory operands to be copied into registers before doingarithmetic on them. This produces better code by making all memoryreferences potential common subexpressions. When they are not commonsubexpressions, instruction combination should eliminate the separateregister-load.

Enabled at levels -O2, -O3, -Os.

-fforce-addr
Force memory address constants to be copied into registers beforedoing arithmetic on them. This may produce better code just as-fforce-mem may.
-fomit-frame-pointer
Don't keep the frame pointer in a register for functions thatdon't need one. This avoids the instructions to save, set up andrestore frame pointers; it also makes an extra register availablein many functions. It also makes debugging impossible onsome machines.

On some machines, such as the VAX, this flag has no effect, becausethe standard calling sequence automatically handles the frame pointerand nothing is saved by pretending it doesn't exist. Themachine-description macro FRAME_POINTER_REQUIRED controlswhether a target machine supports this flag. See Register Usage.

Enabled at levels -O, -O2, -O3, -Os.

-foptimize-sibling-calls
Optimize sibling and tail recursive calls.

Enabled at levels -O2, -O3, -Os.

-fno-inline
Don't pay attention to the inline keyword. Normally this optionis used to keep the compiler from expanding any functions inline. Note that if you are not optimizing, no functions can be expanded inline.
-finline-functions
Integrate all simple functions into their callers. The compilerheuristically decides which functions are simple enough to be worthintegrating in this way.

If all calls to a given function are integrated, and the function isdeclared static, then the function is normally not output asassembler code in its own right.

Enabled at level -O3.

-finline-limit=n
By default, GCC limits the size of functions that can be inlined. This flagallows the control of this limit for functions that are explicitly marked asinline (i.e., marked with the inline keyword or defined within the classdefinition in c++). n is the size of functions that can be inlined innumber of pseudo instructions (not counting parameter handling). The defaultvalue of n is 600. Increasing this value can result in more inlined code atthe cost of compilation time and memory consumption. Decreasing usually makesthe compilation faster and less code will be inlined (which presumablymeans slower programs). This option is particularly useful for programs thatuse inlining heavily such as those based on recursive templates with C++.

Inlining is actually controlled by a number of parameters, which may bespecified individually by using --param name=value. The -finline-limit=n option sets some of these parametersas follows:

max-inline-insns-single
is set to n/2.
max-inline-insns-auto
is set to n/2.
min-inline-insns
is set to 130 or n/4, whichever is smaller.
max-inline-insns-rtl
is set to n.

See below for a documentation of the individualparameters controlling inlining.

Note: pseudo instruction represents, in this particular context, anabstract measurement of function's size. In no way, it represents a countof assembly instructions and as such its exact meaning might change from onerelease to an another.

-fkeep-inline-functions
Even if all calls to a given function are integrated, and the functionis declared static, nevertheless output a separate run-timecallable version of the function. This switch does not affectextern inline functions.
-fkeep-static-consts
Emit variables declared static const when optimization isn't turnedon, even if the variables aren't referenced.

GCC enables this option by default. If you want to force the compiler tocheck if the variable was referenced, regardless of whether or notoptimization is turned on, use the -fno-keep-static-consts option.

-fmerge-constants
Attempt to merge identical constants (string constants and floating pointconstants) across compilation units.

This option is the default for optimized compilation if the assembler andlinker support it. Use -fno-merge-constants to inhibit thisbehavior.

Enabled at levels -O, -O2, -O3, -Os.

-fmerge-all-constants
Attempt to merge identical constants and identical variables.

This option implies -fmerge-constants. In addition to-fmerge-constants this considers e.g. even constant initializedarrays or initialized constant variables with integral or floating pointtypes. Languages like C or C++ require each non-automatic variable tohave distinct location, so using this option will result in non-conformingbehavior.

-fnew-ra
Use a graph coloring register allocator. Currently this option is meantonly for testing. Users should not specify this option, since it is notyet ready for production use.
-fno-branch-count-reg
Do not use “decrement and branch” instructions on a count register,but instead generate a sequence of instructions that decrement aregister, compare it against zero, then branch based upon the result. This option is only meaningful on architectures that support suchinstructions, which include x86, PowerPC, IA-64 and S/390.

The default is -fbranch-count-reg, enabled when-fstrength-reduce is enabled.

-fno-function-cse
Do not put function addresses in registers; make each instruction thatcalls a constant function contain the function's address explicitly.

This option results in less efficient code, but some strange hacksthat alter the assembler output may be confused by the optimizationsperformed when this option is not used.

The default is -ffunction-cse

-fno-zero-initialized-in-bss
If the target supports a BSS section, GCC by default puts variables thatare initialized to zero into BSS. This can save space in the resultingcode.

This option turns off this behavior because some programs explicitlyrely on variables going to the data section. E.g., so that theresulting executable can find the beginning of that section and/or makeassumptions based on that.

The default is -fzero-initialized-in-bss.

-fstrength-reduce
Perform the optimizations of loop strength reduction andelimination of iteration variables.

Enabled at levels -O2, -O3, -Os.

-fthread-jumps
Perform optimizations where we check to see if a jump branches to alocation where another comparison subsumed by the first is found. Ifso, the first branch is redirected to either the destination of thesecond branch or a point immediately following it, depending on whetherthe condition is known to be true or false.

Enabled at levels -O, -O2, -O3, -Os.

-fcse-follow-jumps
In common subexpression elimination, scan through jump instructionswhen the target of the jump is not reached by any other path. Forexample, when CSE encounters an if statement with anelse clause, CSE will follow the jump when the conditiontested is false.

Enabled at levels -O2, -O3, -Os.

-fcse-skip-blocks
This is similar to -fcse-follow-jumps, but causes CSE tofollow jumps which conditionally skip over blocks. When CSEencounters a simple if statement with no else clause,-fcse-skip-blocks causes CSE to follow the jump around thebody of the if.

Enabled at levels -O2, -O3, -Os.

-frerun-cse-after-loop
Re-run common subexpression elimination after loop optimizations has beenperformed.

Enabled at levels -O2, -O3, -Os.

-frerun-loop-opt
Run the loop optimizer twice.

Enabled at levels -O2, -O3, -Os.

-fgcse
Perform a global common subexpression elimination pass. This pass also performs global constant and copy propagation.

Note: When compiling a program using computed gotos, a GCCextension, you may get better runtime performance if you disablethe global common subexpression elimination pass by adding-fno-gcse to the command line.

Enabled at levels -O2, -O3, -Os.

-fgcse-lm
When -fgcse-lm is enabled, global common subexpression elimination willattempt to move loads which are only killed by stores into themselves. Thisallows a loop containing a load/store sequence to be changed to a load outsidethe loop, and a copy/store within the loop.

Enabled by default when gcse is enabled.

-fgcse-sm
When -fgcse-sm is enabled, a store motion pass is run afterglobal common subexpression elimination. This pass will attempt to movestores out of loops. When used in conjunction with -fgcse-lm,loops containing a load/store sequence can be changed to a load beforethe loop and a store after the loop.

Enabled by default when gcse is enabled.

-fgcse-las
When -fgcse-las is enabled, the global common subexpressionelimination pass eliminates redundant loads that come after stores to thesame memory location (both partial and full redundancies).

Enabled by default when gcse is enabled.

-floop-optimize
Perform loop optimizations: move constant expressions out of loops, simplifyexit test conditions and optionally do strength-reduction and loop unrolling aswell.

Enabled at levels -O, -O2, -O3, -Os.

-fcrossjumping
Perform cross-jumping transformation. This transformation unifies equivalent code and save code size. Theresulting code may or may not perform better than without cross-jumping.

Enabled at levels -O, -O2, -O3, -Os.

-fif-conversion
Attempt to transform conditional jumps into branch-less equivalents. Thisinclude use of conditional moves, min, max, set flags and abs instructions, andsome tricks doable by standard arithmetics. The use of conditional executionon chips where it is available is controlled by if-conversion2.

Enabled at levels -O, -O2, -O3, -Os.

-fif-conversion2
Use conditional execution (where available) to transform conditional jumps intobranch-less equivalents.

Enabled at levels -O, -O2, -O3, -Os.

-fdelete-null-pointer-checks
Use global dataflow analysis to identify and eliminate useless checksfor null pointers. The compiler assumes that dereferencing a nullpointer would have halted the program. If a pointer is checked afterit has already been dereferenced, it cannot be null.

In some environments, this assumption is not true, and programs cansafely dereference null pointers. Use-fno-delete-null-pointer-checks to disable this optimizationfor programs which depend on that behavior.

Enabled at levels -O2, -O3, -Os.

-fexpensive-optimizations
Perform a number of minor optimizations that are relatively expensive.

Enabled at levels -O2, -O3, -Os.

-foptimize-register-move-fregmove
Attempt to reassign register numbers in move instructions and asoperands of other simple instructions in order to maximize the amount ofregister tying. This is especially helpful on machines with two-operandinstructions.

Note -fregmove and -foptimize-register-move are the sameoptimization.

Enabled at levels -O2, -O3, -Os.

-fdelayed-branch
If supported for the target machine, attempt to reorder instructionsto exploit instruction slots available after delayed branchinstructions.

Enabled at levels -O, -O2, -O3, -Os.

-fschedule-insns
If supported for the target machine, attempt to reorder instructions toeliminate execution stalls due to required data being unavailable. Thishelps machines that have slow floating point or memory load instructionsby allowing other instructions to be issued until the result of the loador floating point instruction is required.

Enabled at levels -O2, -O3, -Os.

-fschedule-insns2
Similar to -fschedule-insns, but requests an additional pass ofinstruction scheduling after register allocation has been done. This isespecially useful on machines with a relatively small number ofregisters and where memory load instructions take more than one cycle.

Enabled at levels -O2, -O3, -Os.

-fno-sched-interblock
Don't schedule instructions across basic blocks. This is normallyenabled by default when scheduling before register allocation, i.e. with -fschedule-insns or at -O2 or higher.
-fno-sched-spec
Don't allow speculative motion of non-load instructions. This is normallyenabled by default when scheduling before register allocation, i.e. with -fschedule-insns or at -O2 or higher.
-fsched-spec-load
Allow speculative motion of some load instructions. This only makessense when scheduling before register allocation, i.e. with-fschedule-insns or at -O2 or higher.
-fsched-spec-load-dangerous
Allow speculative motion of more load instructions. This only makessense when scheduling before register allocation, i.e. with-fschedule-insns or at -O2 or higher.
-fsched-stalled-insns=n
Define how many insns (if any) can be moved prematurely from the queueof stalled insns into the ready list, during the second scheduling pass.
-fsched-stalled-insns-dep=n
Define how many insn groups (cycles) will be examined for a dependencyon a stalled insn that is candidate for premature removal from the queueof stalled insns. Has an effect only during the second scheduling pass,and only if -fsched-stalled-insns is used and its value is not zero.
-fsched2-use-superblocks
When scheduling after register allocation, do use superblock schedulingalgorithm. Superblock scheduling allows motion across basic block boundariesresulting on faster schedules. This option is experimental, as not all machinedescriptions used by GCC model the CPU closely enough to avoid unreliableresults from the algorithm.

This only makes sense when scheduling after register allocation, i.e. with-fschedule-insns2 or at -O2 or higher.

-fsched2-use-traces
Use -fsched2-use-superblocks algorithm when scheduling after registerallocation and additionally perform code duplication in order to increase thesize of superblocks using tracer pass. See -ftracer for details ontrace formation.

This mode should produce faster but significantly longer programs. Alsowithout -fbranch-probabilities the traces constructed may not match thereality and hurt the performance. This only makessense when scheduling after register allocation, i.e. with-fschedule-insns2 or at -O2 or higher.

-fcaller-saves
Enable values to be allocated in registers that will be clobbered byfunction calls, by emitting extra instructions to save and restore theregisters around such calls. Such allocation is done only when itseems to result in better code than would otherwise be produced.

This option is always enabled by default on certain machines, usuallythose which have no call-preserved registers to use instead.

Enabled at levels -O2, -O3, -Os.

-fmove-all-movables
Forces all invariant computations in loops to be movedoutside the loop.
-freduce-all-givs
Forces all general-induction variables in loops to bestrength-reduced.

Note: When compiling programs written in Fortran,-fmove-all-movables and -freduce-all-givs are enabledby default when you use the optimizer.

These options may generate better or worse code; results are highlydependent on the structure of loops within the source code.

These two options are intended to be removed someday, oncethey have helped determine the efficacy of variousapproaches to improving loop optimizations.

Please contact gcc@gcc.gnu.org, and describe how use ofthese options affects the performance of your production code. Examples of code that runs slower when these options areenabled are very valuable.

-fno-peephole-fno-peephole2
Disable any machine-specific peephole optimizations. The differencebetween -fno-peephole and -fno-peephole2 is in how theyare implemented in the compiler; some targets use one, some use theother, a few use both.

-fpeephole is enabled by default. -fpeephole2 enabled at levels -O2, -O3, -Os.

-fno-guess-branch-probability
Do not guess branch probabilities using a randomized model.

Sometimes GCC will opt to use a randomized model to guess branchprobabilities, when none are available from either profiling feedback(-fprofile-arcs) or `__builtin_expect'. This means thatdifferent runs of the compiler on the same program may produce differentobject code.

In a hard real-time system, people don't want different runs of thecompiler to produce code that has different behavior; minimizingnon-determinism is of paramount import. This switch allows users toreduce non-determinism, possibly at the expense of inferioroptimization.

The default is -fguess-branch-probability at levels-O, -O2, -O3, -Os.

-freorder-blocks
Reorder basic blocks in the compiled function in order to reduce number oftaken branches and improve code locality.

Enabled at levels -O2, -O3.

-freorder-functions
Reorder basic blocks in the compiled function in order to reduce number oftaken branches and improve code locality. This is implemented by using specialsubsections .text.hot for most frequently executed functions and.text.unlikely for unlikely executed functions. Reordering is done bythe linker so object file format must support named sections and linker mustplace them in a reasonable way.

Also profile feedback must be available in to make this option effective. See-fprofile-arcs for details.

Enabled at levels -O2, -O3, -Os.

-fstrict-aliasing
Allows the compiler to assume the strictest aliasing rules applicable tothe language being compiled. For C (and C++), this activatesoptimizations based on the type of expressions. In particular, anobject of one type is assumed never to reside at the same address as anobject of a different type, unless the types are almost the same. Forexample, an unsigned int can alias an int, but not avoid* or a double. A character type may alias any othertype.

Pay special attention to code like this:

union a_union {int i;double d;};int f() {a_union t;t.d = 3.0;return t.i;}

The practice of reading from a different union member than the one mostrecently written to (called “type-punning”) is common. Even with-fstrict-aliasing, type-punning is allowed, provided the memoryis accessed through the union type. So, the code above will work asexpected. However, this code might not:

int f() {a_union t;int* ip;t.d = 3.0;ip = &t.i;return *ip;}

Every language that wishes to perform language-specific alias analysisshould define a function that computes, given an treenode, an alias set for the node. Nodes in different alias sets are notallowed to alias. For an example, see the C front-end functionc_get_alias_set.

Enabled at levels -O2, -O3, -Os.

-falign-functions-falign-functions=n
Align the start of functions to the next power-of-two greater thann, skipping up to n bytes. For instance,-falign-functions=32 aligns functions to the next 32-byteboundary, but -falign-functions=24 would align to the next32-byte boundary only if this can be done by skipping 23 bytes or less.

-fno-align-functions and -falign-functions=1 areequivalent and mean that functions will not be aligned.

Some assemblers only support this flag when n is a power of two;in that case, it is rounded up.

If n is not specified or is zero, use a machine-dependent default.

Enabled at levels -O2, -O3.

-falign-labels-falign-labels=n
Align all branch targets to a power-of-two boundary, skipping up ton bytes like -falign-functions. This option can easilymake code slower, because it must insert dummy operations for when thebranch target is reached in the usual flow of the code.

-fno-align-labels and -falign-labels=1 areequivalent and mean that labels will not be aligned.

If -falign-loops or -falign-jumps are applicable andare greater than this value, then their values are used instead.

If n is not specified or is zero, use a machine-dependent defaultwhich is very likely to be `1', meaning no alignment.

Enabled at levels -O2, -O3.

-falign-loops-falign-loops=n
Align loops to a power-of-two boundary, skipping up to n byteslike -falign-functions. The hope is that the loop will beexecuted many times, which will make up for any execution of the dummyoperations.

-fno-align-loops and -falign-loops=1 areequivalent and mean that loops will not be aligned.

If n is not specified or is zero, use a machine-dependent default.

Enabled at levels -O2, -O3.

-falign-jumps-falign-jumps=n
Align branch targets to a power-of-two boundary, for branch targetswhere the targets can only be reached by jumping, skipping up to nbytes like -falign-functions. In this case, no dummy operationsneed be executed.

-fno-align-jumps and -falign-jumps=1 areequivalent and mean that loops will not be aligned.

If n is not specified or is zero, use a machine-dependent default.

Enabled at levels -O2, -O3.

-frename-registers
Attempt to avoid false dependencies in scheduled code by making useof registers left over after register allocation. This optimizationwill most benefit processors with lots of registers. It can, however,make debugging impossible, since variables will no longer stay ina “home register”.
-fweb
Constructs webs as commonly used for register allocation purposes and assigneach web individual pseudo register. This allows the register allocation passto operate on pseudos directly, but also strengthens several other optimizationpasses, such as CSE, loop optimizer and trivial dead code remover. It can,however, make debugging impossible, since variables will no longer stay in a“home register”.

Enabled at levels -O3.

-fno-cprop-registers
After register allocation and post-register allocation instruction splitting,we perform a copy-propagation pass to try to reduce scheduling dependenciesand occasionally eliminate the copy.

Disabled at levels -O, -O2, -O3, -Os.

-fprofile-generate
Enable options usually used for instrumenting application to produceprofile useful for later recompilation with profile feedback basedoptimization. You must use -fprofile-generate both whencompiling and when linking your program.

The following options are enabled: -fprofile-arcs, -fprofile-values, -fvpt.

-fprofile-use
Enable profile feedback directed optimizations, and optimizationsgenerally profitable only with profile feedback available.

The following options are enabled: -fbranch-probabilities,-fvpt, -funroll-loops, -fpeel-loops, -ftracer.

The following options control compiler behavior regarding floatingpoint arithmetic. These options trade off between speed andcorrectness. All must be specifically enabled.

-ffloat-store
Do not store floating point variables in registers, and inhibit otheroptions that might change whether a floating point value is taken from aregister or memory.

This option prevents undesirable excess precision on machines such asthe 68000 where the floating registers (of the 68881) keep moreprecision than a double is supposed to have. Similarly for thex86 architecture. For most programs, the excess precision does onlygood, but a few programs rely on the precise definition of IEEE floatingpoint. Use -ffloat-store for such programs, after modifyingthem to store all pertinent intermediate computations into variables.

-ffast-math
Sets -fno-math-errno, -funsafe-math-optimizations,
-fno-trapping-math, -ffinite-math-only,-fno-rounding-math and -fno-signaling-nans.

This option causes the preprocessor macro __FAST_MATH__ to be defined.

This option should never be turned on by any -O option sinceit can result in incorrect output for programs which depend onan exact implementation of IEEE or ISO rules/specifications formath functions.

-fno-math-errno
Do not set ERRNO after calling math functions that are executedwith a single instruction, e.g., sqrt. A program that relies onIEEE exceptions for math error handling may want to use this flagfor speed while maintaining IEEE arithmetic compatibility.

This option should never be turned on by any -O option sinceit can result in incorrect output for programs which depend onan exact implementation of IEEE or ISO rules/specifications formath functions.

The default is -fmath-errno.

-funsafe-math-optimizations
Allow optimizations for floating-point arithmetic that (a) assumethat arguments and results are valid and (b) may violate IEEE orANSI standards. When used at link-time, it may include librariesor startup files that change the default FPU control word or othersimilar optimizations.

This option should never be turned on by any -O option sinceit can result in incorrect output for programs which depend onan exact implementation of IEEE or ISO rules/specifications formath functions.

The default is -fno-unsafe-math-optimizations.

-ffinite-math-only
Allow optimizations for floating-point arithmetic that assumethat arguments and results are not NaNs or +-Infs.

This option should never be turned on by any -O option sinceit can result in incorrect output for programs which depend onan exact implementation of IEEE or ISO rules/specifications.

The default is -fno-finite-math-only.

-fno-trapping-math
Compile code assuming that floating-point operations cannot generateuser-visible traps. These traps include division by zero, overflow,underflow, inexact result and invalid operation. This option implies-fno-signaling-nans. Setting this option may allow fastercode if one relies on “non-stop” IEEE arithmetic, for example.

This option should never be turned on by any -O option sinceit can result in incorrect output for programs which depend onan exact implementation of IEEE or ISO rules/specifications formath functions.

The default is -ftrapping-math.

-frounding-math
Disable transformations and optimizations that assume default floatingpoint rounding behavior. This is round-to-zero for all floating pointto integer conversions, and round-to-nearest for all other arithmetictruncations. This option should be specified for programs that changethe FP rounding mode dynamically, or that may be executed with anon-default rounding mode. This option disables constant folding offloating point expressions at compile-time (which may be affected byrounding mode) and arithmetic transformations that are unsafe in thepresence of sign-dependent rounding modes.

The default is -fno-rounding-math.

This option is experimental and does not currently guarantee todisable all GCC optimizations that are affected by rounding mode. Future versions of GCC may provide finer control of this settingusing C99's FENV_ACCESS pragma. This command line optionwill be used to specify the default state for FENV_ACCESS.

-fsignaling-nans
Compile code assuming that IEEE signaling NaNs may generate user-visibletraps during floating-point operations. Setting this option disablesoptimizations that may change the number of exceptions visible withsignaling NaNs. This option implies -ftrapping-math.

This option causes the preprocessor macro __SUPPORT_SNAN__ tobe defined.

The default is -fno-signaling-nans.

This option is experimental and does not currently guarantee todisable all GCC optimizations that affect signaling NaN behavior.

-fsingle-precision-constant
Treat floating point constant as single precision constant instead ofimplicitly converting it to double precision constant.

The following options control optimizations that may improveperformance, but are not enabled by any -O options. Thissection includes experimental options that may produce broken code.

-fbranch-probabilities
After running a program compiled with -fprofile-arcs(see Options for Debugging Your Program or gcc), you can compile it a second time using-fbranch-probabilities, to improve optimizations based onthe number of times each branch was taken. When the programcompiled with -fprofile-arcs exits it saves arc executioncounts to a file called sourcename.gcda for each sourcefile The information in this data file is very dependent on thestructure of the generated code, so you must use the same source codeand the same optimization options for both compilations.

With -fbranch-probabilities, GCC puts a`REG_BR_PROB' note on each `JUMP_INSN' and `CALL_INSN'. These can be used to improve optimization. Currently, they are onlyused in one place: in reorg.c, instead of guessing which path abranch is mostly to take, the `REG_BR_PROB' values are used toexactly determine which path is taken more often.

-fprofile-values
If combined with -fprofile-arcs, it adds code so that somedata about values of expressions in the program is gathered.

With -fbranch-probabilities, it reads back the data gatheredfrom profiling values of expressions and adds `REG_VALUE_PROFILE'notes to instructions for their later usage in optimizations.

-fvpt
If combined with -fprofile-arcs, it instructs the compiler to adda code to gather information about values of expressions.

With -fbranch-probabilities, it reads back the data gatheredand actually performs the optimizations based on them. Currently the optimizations include specialization of division operationusing the knowledge about the value of the denominator.

-fnew-ra
Use a graph coloring register allocator. Currently this option is meantfor testing, so we are interested to hear about miscompilations with-fnew-ra.
-ftracer
Perform tail duplication to enlarge superblock size. This transformationsimplifies the control flow of the function allowing other optimizations to dobetter job.
-funit-at-a-time
Parse the whole compilation unit before starting to produce code. This allows some extra optimizations to take place but consumes morememory.
-funroll-loops
Unroll loops whose number of iterations can be determined at compile time orupon entry to the loop. -funroll-loops implies-frerun-cse-after-loop. It also turns on complete loop peeling(i.e. complete removal of loops with small constant number of iterations). This option makes code larger, and may or may not make it run faster.
-funroll-all-loops
Unroll all loops, even if their number of iterations is uncertain whenthe loop is entered. This usually makes programs run more slowly. -funroll-all-loops implies the same options as-funroll-loops.
-fpeel-loops
Peels the loops for that there is enough information that they do notroll much (from profile feedback). It also turns on complete loop peeling(i.e. complete removal of loops with small constant number of iterations).
-funswitch-loops
Move branches with loop invariant conditions out of the loop, with duplicatesof the loop on both branches (modified according to result of the condition).
-fold-unroll-loops
Unroll loops whose number of iterations can be determined at compiletime or upon entry to the loop, using the old loop unroller whose looprecognition is based on notes from frontend. -fold-unroll-loops impliesboth -fstrength-reduce and -frerun-cse-after-loop. Thisoption makes code larger, and may or may not make it run faster.
-fold-unroll-all-loops
Unroll all loops, even if their number of iterations is uncertain whenthe loop is entered. This is done using the old loop unroller whose looprecognition is based on notes from frontend. This usually makes programs run more slowly. -fold-unroll-all-loops implies the same options as-fold-unroll-loops.
-funswitch-loops
Move branches with loop invariant conditions out of the loop, with duplicatesof the loop on both branches (modified according to result of the condition).
-funswitch-loops
Move branches with loop invariant conditions out of the loop, with duplicatesof the loop on both branches (modified according to result of the condition).
-fprefetch-loop-arrays
If supported by the target machine, generate instructions to prefetchmemory to improve the performance of loops that access large arrays.

Disabled at level -Os.

-ffunction-sections-fdata-sections
Place each function or data item into its own section in the outputfile if the target supports arbitrary sections. The name of thefunction or the name of the data item determines the section's namein the output file.

Use these options on systems where the linker can perform optimizationsto improve locality of reference in the instruction space. Most systemsusing the ELF object format and SPARC processors running Solaris 2 havelinkers with such optimizations. AIX may have these optimizations inthe future.

Only use these options when there are significant benefits from doingso. When you specify these options, the assembler and linker willcreate larger object and executable files and will also be slower. You will not be able to use gprof on all systems if youspecify this option and you may have problems with debugging ifyou specify both this option and -g.

-fbranch-target-load-optimize
Perform branch target register load optimization before prologue / epiloguethreading. The use of target registers can typically be exposed only during reload,thus hoisting loads out of loops and doing inter-block scheduling needsa separate optimization pass.
-fbranch-target-load-optimize2
Perform branch target register load optimization after prologue / epiloguethreading.
--param name=value
In some places, GCC uses various constants to control the amount ofoptimization that is done. For example, GCC will not inline functionsthat contain more that a certain number of instructions. You cancontrol some of these constants on the command-line using the--param option.

The names of specific parameters, and the meaning of the values, aretied to the internals of the compiler, and are subject to changewithout notice in future releases.

In each case, the value is an integer. The allowable choices forname are given in the following table:

max-crossjump-edges
The maximum number of incoming edges to consider for crossjumping. The algorithm used by -fcrossjumping is O(N^2) inthe number of edges incoming to each block. Increasing values meanmore aggressive optimization, making the compile time increase withprobably small improvement in executable size.
max-delay-slot-insn-search
The maximum number of instructions to consider when looking for aninstruction to fill a delay slot. If more than this arbitrary number ofinstructions is searched, the time savings from filling the delay slotwill be minimal so stop searching. Increasing values mean moreaggressive optimization, making the compile time increase with probablysmall improvement in executable run time.
max-delay-slot-live-search
When trying to fill delay slots, the maximum number of instructions toconsider when searching for a block with valid live registerinformation. Increasing this arbitrarily chosen value means moreaggressive optimization, increasing the compile time. This parametershould be removed when the delay slot code is rewritten to maintain thecontrol-flow graph.
max-gcse-memory
The approximate maximum amount of memory that will be allocated inorder to perform the global common subexpression eliminationoptimization. If more memory than specified is required, theoptimization will not be done.
max-gcse-passes
The maximum number of passes of GCSE to run.
max-pending-list-length
The maximum number of pending dependencies scheduling will allowbefore flushing the current state and starting over. Large functionswith few branches or calls can create excessively large lists whichneedlessly consume memory and resources.
max-inline-insns-single
Several parameters control the tree inliner used in gcc. This number sets the maximum number of instructions (counted in GCC'sinternal representation) in a single function that the tree inlinerwill consider for inlining. This only affects functions declaredinline and methods implemented in a class declaration (C++). The default value is 500.
max-inline-insns-auto
When you use -finline-functions (included in -O3),a lot of functions that would otherwise not be considered for inliningby the compiler will be investigated. To those functions, a different(more restrictive) limit compared to functions declared inline canbe applied. The default value is 100.
large-function-insns
The limit specifying really large functions. For functions greater than thislimit inlining is constrained by --param large-function-growth. This parameter is useful primarily to avoid extreme compilation time caused by non-linearalgorithms used by the backend. This parameter is ignored when -funit-at-a-time is not used. The default value is 3000.
large-function-growth
Specifies maximal growth of large function caused by inlining in percents. This parameter is ignored when -funit-at-a-time is not used. The default value is 200.
inline-unit-growth
Specifies maximal overall growth of the compilation unit caused by inlining. This parameter is ignored when -funit-at-a-time is not used. The default value is 150.
max-inline-insns-rtl
For languages that use the RTL inliner (this happens at a later stagethan tree inlining), you can set the maximum allowable size (countedin RTL instructions) for the RTL inliner with this parameter. The default value is 600.
max-unrolled-insns
The maximum number of instructions that a loop should have if that loopis unrolled, and if the loop is unrolled, it determines how many timesthe loop code is unrolled.
max-average-unrolled-insns
The maximum number of instructions biased by probabilities of their executionthat a loop should have if that loop is unrolled, and if the loop is unrolled,it determines how many times the loop code is unrolled.
max-unroll-times
The maximum number of unrollings of a single loop.
max-peeled-insns
The maximum number of instructions that a loop should have if that loopis peeled, and if the loop is peeled, it determines how many timesthe loop code is peeled.
max-peel-times
The maximum number of peelings of a single loop.
max-completely-peeled-insns
The maximum number of insns of a completely peeled loop.
max-completely-peel-times
The maximum number of iterations of a loop to be suitable for complete peeling.
max-unswitch-insns
The maximum number of insns of an unswitched loop.
max-unswitch-level
The maximum number of branches unswitched in a single loop.
hot-bb-count-fraction
Select fraction of the maximal count of repetitions of basic block in programgiven basic block needs to have to be considered hot.
hot-bb-frequency-fraction
Select fraction of the maximal frequency of executions of basic block infunction given basic block needs to have to be considered hot
tracer-dynamic-coveragetracer-dynamic-coverage-feedback
This value is used to limit superblock formation once the given percentage ofexecuted instructions is covered. This limits unnecessary code sizeexpansion.

The tracer-dynamic-coverage-feedback is used only when profilefeedback is available. The real profiles (as opposed to statically estimatedones) are much less balanced allowing the threshold to be larger value.

tracer-max-code-growth
Stop tail duplication once code growth has reached given percentage. This israther hokey argument, as most of the duplicates will be eliminated later incross jumping, so it may be set to much higher values than is the desired codegrowth.
tracer-min-branch-ratio
Stop reverse growth when the reverse probability of best edge is less than thisthreshold (in percent).
tracer-min-branch-ratiotracer-min-branch-ratio-feedback
Stop forward growth if the best edge do have probability lower than thisthreshold.

Similarly to tracer-dynamic-coverage two values are present, one forcompilation for profile feedback and one for compilation without. The valuefor compilation with profile feedback needs to be more conservative (higher) inorder to make tracer effective.

max-cse-path-length
Maximum number of basic blocks on path that cse considers.
max-last-value-rtl
The maximum size measured as number of RTLs that can be recorded in anexpression in combiner for a pseudo register as last known value of thatregister. The default is 10000.
ggc-min-expand
GCC uses a garbage collector to manage its own memory allocation. Thisparameter specifies the minimum percentage by which the garbagecollector's heap should be allowed to expand between collections. Tuning this may improve compilation speed; it has no effect on codegeneration.

The default is 30% + 70% * (RAM/1GB) with an upper bound of 100% whenRAM >= 1GB. If getrlimit is available, the notion of "RAM" isthe smallest of actual RAM, RLIMIT_RSS, RLIMIT_DATA and RLIMIT_AS. IfGCC is not able to calculate RAM on a particular platform, the lowerbound of 30% is used. Setting this parameter andggc-min-heapsize to zero causes a full collection to occur atevery opportunity. This is extremely slow, but can be useful fordebugging.

ggc-min-heapsize
Minimum size of the garbage collector's heap before it begins botheringto collect garbage. The first collection occurs after the heap expandsby ggc-min-expand% beyond ggc-min-heapsize. Again,tuning this may improve compilation speed, and has no effect on codegeneration.

The default is RAM/8, with a lower bound of 4096 (four megabytes) and anupper bound of 131072 (128 megabytes). If getrlimit isavailable, the notion of "RAM" is the smallest of actual RAM,RLIMIT_RSS, RLIMIT_DATA and RLIMIT_AS. If GCC is not able to calculateRAM on a particular platform, the lower bound is used. Setting thisparameter very large effectively disables garbage collection. Settingthis parameter and ggc-min-expand to zero causes a fullcollection to occur at every opportunity.

max-reload-search-insns
The maximum number of instruction reload should look backward for equivalentregister. Increasing values mean more aggressive optimization, making thecompile time increase with probably slightly better performance. The defaultvalue is 100.
max-cselib-memory-location
The maximum number of memory locations cselib should take into acount. Increasing values mean more aggressive optimization, making the compile timeincrease with probably slightly better performance. The default value is 500.
reorder-blocks-duplicatereorder-blocks-duplicate-feedback
Used by basic block reordering pass to decide whether to use unconditionalbranch or duplicate the code on its destination. Code is duplicated when itsestimated size is smaller than this value multiplied by the estimated size ofunconditional jump in the hot spots of the program.

The reorder-block-duplicate-feedback is used only when profilefeedback is available and may be set to higher values thanreorder-block-duplicate since information about the hot spots is moreaccurate.


總結

以上是生活随笔為你收集整理的GCC优化选项:一般的文档里不容易找到的-Os的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

久久久国产在线视频 | 国产视频一区在线播放 | 久久网页 | 亚洲综合干| 91片黄在线观看 | 久久av影院 | 成人97视频一区二区 | 国产日韩在线观看一区 | 国产精品免费人成网站 | 丁香五婷 | 日韩午夜电影院 | 欧美日韩一二三四区 | av九九| 成人免费91 | 日本精a在线观看 | 国产视频日本 | 999国产在线 | 久久久99精品免费观看乱色 | 91av网站在线观看 | 五月婷婷六月丁香在线观看 | 91色影院| av黄色亚洲 | 国产精品一区二区电影 | 日韩电影中文,亚洲精品乱码 | 久久男人中文字幕资源站 | 亚洲电影免费 | 九九免费观看全部免费视频 | 精品国产一区二区三区男人吃奶 | 久久tv | 色资源中文字幕 | 日本高清dvd | 人人插人人爱 | av噜噜噜在线播放 | 99精品视频免费看 | 99久久精品国产网站 | 91在线看网站| 深爱开心激情网 | 国产成人91 | 国产在线免费av | 欧美一区二区三区在线视频观看 | 偷拍福利视频一区二区三区 | 激情影音先锋 | 91精品在线看 | 久久久久成人精品免费播放动漫 | 人人澡人摸人人添学生av | 中文字幕 二区 | 亚洲国产精彩中文乱码av | 天天av在线播放 | 五月婷婷在线综合 | 日日添夜夜添 | 日韩av视屏在线观看 | 99久久久国产精品免费观看 | 99精品黄色片免费大全 | 91少妇精拍在线播放 | 天天操天天操天天操天天操天天操 | 免费日p视频 | 亚洲激情在线视频 | 91黄色成人 | 日本成人中文字幕在线观看 | 免费看黄在线 | 日本中文字幕高清 | 五月天久久久 | 亚洲成aⅴ人在线观看 | 在线黄色免费 | 成人久久18免费网站图片 | 色香蕉网 | 免费在线国产精品 | 亚洲精品乱码白浆高清久久久久久 | 国际精品网 | 天天色天天射综合网 | 国产999精品久久久 免费a网站 | 91av免费看 | 中文乱幕日产无线码1区 | 中文高清av | 国产三级视频在线 | 亚洲欧美日韩在线一区二区 | 国产一区二区影院 | 久久夜色精品国产欧美一区麻豆 | 天天色棕合合合合合合 | 天天干天天做天天操 | 99re国产视频 | 国产日韩精品在线观看 | 国产一区二区中文字幕 | 成人永久视频 | 成人h在线 | 中文字幕视频网站 | 免费网站看av片 | 2021国产在线视频 | 狠狠色丁香久久婷婷综合五月 | 免费看国产一级片 | 视频一区在线播放 | 欧美一级特黄aaaaaa大片在线观看 | 欧美一区二区在线刺激视频 | 欧美日韩精品久久久 | 黄色aa久久| 麻豆视频一区二区 | 色播五月激情五月 | 亚洲综合色激情五月 | 午夜免费福利视频 | 国产精品原创 | 国产一区二区三区免费在线 | 欧美日韩在线观看一区 | 国产精品美女久久久网av | 成人h动漫精品一区二 | 日韩91av | a√资源在线 | av观看网站 | 亚洲动漫在线观看 | 激情在线五月天 | 中文字幕国产一区二区 | 黄色av电影在线 | 97在线观看免费观看高清 | 69视频永久免费观看 | 久久精品视频网 | 欧美巨乳网 | 99精品在线免费在线观看 | 国产精品一区二区免费看 | 91丨九色丨国产女 | 激情图片久久 | 91成人久久 | 久久免费国产视频 | 超碰在线人人 | 亚洲最快最全在线视频 | 免费一级片在线观看 | 91热精品| 欧美日本不卡视频 | 欧美日韩中文另类 | 久久综合操| 中文字幕久久精品一区 | 99免在线观看免费视频高清 | a资源在线 | 精品亚洲网 | 人人干干人人 | 久久最新视频 | av成人动漫 | 亚洲国产高清视频 | 亚洲天天在线日亚洲洲精 | 亚洲欧美日韩精品久久久 | 中文av日韩 | 一色av| 在线国产一区 | 蜜臀久久99精品久久久无需会员 | 国产999精品久久久久久麻豆 | 国产一级高清 | 欧美日韩三级在线观看 | 亚洲一区二区三区精品在线观看 | 成人一级免费电影 | 九九视频网站 | 三级黄色免费 | jizzjizzjizz亚洲 | 亚洲特级毛片 | 日韩精品专区在线影院重磅 | 国产黄色在线观看 | 亚洲有 在线 | 免费男女网站 | av成人免费在线观看 | 国产成人av免费在线观看 | 国产精品在线看 | 国产日本在线观看 | 婷婷精品国产一区二区三区日韩 | 亚洲涩涩色| 99久久久久 | 亚洲在线高清 | 免费看污网站 | 精品美女在线视频 | 久久伊人婷婷 | 国内精品久久久久国产 | 日本一区二区不卡高清 | 亚洲精品在线免费观看视频 | 久久午夜羞羞影院 | 在线免费观看羞羞视频 | 99精品偷拍视频一区二区三区 | 天天爱天天射天天干天天 | 亚洲无吗av| 久久国产精品99久久久久 | 日韩超碰在线 | 亚洲激情六月 | 免费久久99精品国产婷婷六月 | 中文字幕在线观看一区 | 婷婷av在线 | 在线观看 国产 | 奇米先锋 | 精品一区91 | 免费成人在线电影 | 成人在线你懂得 | 久精品视频在线观看 | 爱情影院aqdy鲁丝片二区 | 久久国产午夜精品理论片最新版本 | 久久蜜臀av| 97超视频在线观看 | 国产白浆在线观看 | 国产精品久久一 | 久草精品资源 | 丁香婷婷综合网 | 人人狠| 青草视频在线播放 | 色婷婷国产在线 | 日本久久久精品视频 | 97超级碰碰碰视频在线观看 | 999久久久久久久久 69av视频在线观看 | 99精品欧美一区二区三区 | av福利资源| 黄色亚洲免费 | 九月婷婷综合网 | 欧美午夜久久 | 在线观看免费成人 | 久久久久一区二区三区 | 欧美一级片免费在线观看 | 国产 日韩 欧美 自拍 | 中文字幕成人网 | 久久r精品 | 夜夜夜影院 | 久久精品一二三区白丝高潮 | 精品你懂的 | 在线电影av | 91精品啪啪 | 在线国产欧美 | 亚洲精区二区三区四区麻豆 | 婷婷丁香导航 | 免费在线国产 | 国产精品久久久久久久久久久久久 | 日韩精品免费一线在线观看 | 天天干,天天操 | 97成人在线免费视频 | 亚洲国产中文字幕在线视频综合 | 成人三级视频 | 伊人网av | 午夜骚影| 欧美日韩高清一区二区 | 国产精品999久久久 久产久精国产品 | 国产精品麻豆欧美日韩ww | 欧美乱码精品一区二区 | 国产一区二区三精品久久久无广告 | 在线国产专区 | 日日夜日日干 | 日韩三级中文字幕 | 国产精品99在线播放 | 精品国产人成亚洲区 | 天天操夜夜操夜夜操 | 色天天久久 | 欧美日韩久久 | 日本激情动作片免费看 | 久久av免费| 日韩精品久久久久久 | 亚洲一区欧美激情 | 日韩av免费在线看 | 亚洲www天堂com | 久久精品国产免费看久久精品 | 99久久国产免费,99久久国产免费大片 | 人人澡人人舔 | 二区视频在线观看 | 九九热精品视频在线播放 | 日本性高潮视频 | 欧美特一级片 | 97av影院| 天天草综合 | 久久看免费视频 | 天天操天天谢 | 日韩久久视频 | 久久呀 | 中文亚洲欧美日韩 | 亚洲精品小视频在线观看 | 日韩欧美网站 | 免费观看黄色av | 久久久久久久久影视 | 天堂视频中文在线 | 欧美视屏一区二区 | 欧美性色综合网站 | 91福利在线导航 | 视频国产在线观看18 | 2019中文最近的2019中文在线 | 久久久久久久久久免费视频 | 亚洲精品久久在线 | 99这里只有久久精品视频 | 国产精品毛片一区二区 | 99久久精品国产欧美主题曲 | 久久精品99久久久久久2456 | 欧美成年人在线视频 | 国内精品一区二区 | 91丨九色丨蝌蚪丨老版 | 中文字幕 在线看 | 国产精品美女毛片真酒店 | 看毛片网站| 成年人在线视频观看 | 色综合小说 | 日韩在线高清视频 | 天堂麻豆 | 在线影视 一区 二区 三区 | 四虎影视成人精品 | 日韩精品在线观看视频 | 久久精品国亚洲 | 草久久影院 | 日本最大色倩网站www | 久久影院精品 | 欧美日韩国产在线一区 | 日韩视频一区二区三区 | 免费福利视频网站 | 最近中文字幕高清字幕免费mv | 亚洲国产97在线精品一区 | 亚洲精品午夜久久久久久久 | 亚洲免费资源 | 国产亚洲免费的视频看 | 天天看天天干 | 精品日本视频 | 在线三级播放 | 日本午夜免费福利视频 | 亚洲 欧美 91 | 91自拍成人 | 日本99干网 | 亚洲国产精品传媒在线观看 | 久久美女视频 | 国产精品久久一区二区三区不卡 | 国产精品福利久久久 | 99中文字幕视频 | 久久99深爱久久99精品 | 国产精品涩涩屋www在线观看 | 亚洲最新av在线网站 | 一区二区三区四区不卡 | 国产精品黄色 | 成人一级片视频 | 狠狠色伊人亚洲综合网站野外 | av+在线播放在线播放 | 在线高清一区 | 激情综合网婷婷 | 超碰在线观看99 | 婷婷色在线 | 香蕉视频久久 | 久久综合中文色婷婷 | 国产97色在线 | 日本高清久久久 | 国产成人综合在线观看 | 国产人免费人成免费视频 | 一区二区欧美在线观看 | 久久久精品国产一区二区电影四季 | 久久99国产精品二区护士 | 2020天天干夜夜爽 | 日韩在线精品视频 | 99国产精品 | 在线免费观看亚洲视频 | 毛片二区 | 顶级bbw搡bbbb搡bbbb | 国内免费久久久久久久久久久 | 久久精品一二区 | 色婷婷在线播放 | 粉嫩一区二区三区粉嫩91 | 国产日韩三级 | 天天伊人网| 久久综合成人网 | 久久乱码卡一卡2卡三卡四 五月婷婷久 | 992tv成人免费看片 | 午夜色影院 | 一级黄色片在线 | 久久免费视频在线观看6 | 亚洲最新视频在线播放 | 国产精品美女 | 人人dvd | 国产麻豆剧传媒免费观看 | 999精品网 | 精品成人免费 | 一二三区av | 成年人免费电影在线观看 | 五月婷婷中文 | 最新日韩视频 | 97高清免费视频 | zzijzzij亚洲成熟少妇 | 日韩免费在线视频观看 | 91桃花视频 | 国产精品久久久久国产精品日日 | 奇米网8888| 欧美激情视频一区 | 天无日天天操天天干 | 色av男人的天堂免费在线 | 久草在线国产 | 美女视频黄免费 | 成人免费看片网址 | 国产偷v国产偷∨精品视频 在线草 | 欧美国产日韩一区 | 在线观看色网 | www.黄色| 成人久久18免费网站麻豆 | 久久综合九色99 | 国产成人av免费在线观看 | 国产精品毛片一区二区在线看 | 久久免费视频4 | 丁香花中文字幕 | 国产精品毛片网 | 国产成人综合精品 | 国产精品视频地址 | 国产精品久久久久亚洲影视 | 五月亚洲综合 | 西西444www大胆高清视频 | 国产成在线观看免费视频 | 久久伊人婷婷 | 日日日日| 在线 高清 中文字幕 | 亚洲午夜精品久久久久久久久久久久 | 国产精品一区二区无线 | 久久久精品一区二区 | 91在线视频导航 | 日韩在线视频免费看 | 久久你懂得| 日韩毛片在线免费观看 | 日韩在线三级 | 99久热在线精品视频观看 | 九九九免费视频 | 成人免费视频网站 | 91超国产 | 香蕉影视在线观看 | 久久国产亚洲精品 | 国产精品久久久久婷婷 | 国产免费又爽又刺激在线观看 | 91av99| 亚洲精品字幕在线观看 | 欧美成人一区二区 | 国产999视频在线观看 | 日韩黄色在线观看 | 久影院| 亚洲黄色av网址 | 欧美精品亚洲精品日韩精品 | 亚洲国产精品视频在线观看 | 人人爽人人爽av | 国产不卡av在线播放 | 日韩av区| 免费黄色激情视频 | av色图天堂网 | 在线观看视频亚洲 | 成人久久久久 | 91少妇精拍在线播放 | 国产黄色精品在线 | 射综合网| a视频在线观看免费 | 国产直播av | 久久夜色精品国产欧美乱极品 | 亚洲黄色在线免费观看 | 亚洲一区网站 | 在线探花 | 国内揄拍国产精品 | 日韩在线观看你懂的 | 久久免费电影 | 在线欧美a | 国产999精品久久久久久绿帽 | 超碰在线公开免费 | 亚洲成人国产精品 | 日本在线视频一区二区三区 | 国产精品久久久久久久久久新婚 | 最近乱久中文字幕 | 久久久久一区二区三区 | 一区二区三区在线看 | 尤物九九久久国产精品的分类 | 国产精品久久久久久a | 国产午夜精品av一区二区 | 天天射夜夜爽 | 国产黄色观看 | 91亚洲精品久久久中文字幕 | 欧美日韩不卡在线观看 | 99re视频在线观看 | 欧美日韩国产精品一区 | 亚洲婷婷免费 | 麻豆网站免费观看 | 国产91九色视频 | av电影在线观看完整版一区二区 | 久久1区 | 日本中文字幕一二区观 | 精品视频www | 久久综合天天 | 成人国产精品久久久久久亚洲 | 久久久国产视频 | 亚州精品在线视频 | 日本精油按摩3 | 91激情视频在线播放 | 日韩在线电影一区 | 亚洲视频1 | 四虎影视精品 | av片中文| 国产只有精品 | 91av视频网 | 色资源在线观看 | 精品久操 | 一区二区三区 亚洲 | 奇米导航| 成在人线av| 黄色av免费 | 日本69hd| 99久久精品久久久久久动态片 | 中国一级片视频 | 日韩在线观看中文 | 五月婷婷综合在线视频 | 亚洲精品午夜一区人人爽 | 日韩精品一区二区免费 | 91成人在线网站 | 99精品国产福利在线观看免费 | 久久久观看| 久久免费视频在线 | 中文字幕精品一区二区三区电影 | 波多野结衣在线视频免费观看 | 狠狠网亚洲精品 | 97国产| 日韩大片在线看 | 99这里只有精品99 | 五月婷婷丁香综合 | 黄色在线视频网址 | 韩国三级在线一区 | 亚洲涩涩网 | 欧美黄色特级片 | 人人爽人人爽人人片av | www免费看片com | 公与妇乱理三级xxx 在线观看视频在线观看 | 四虎影视成人永久免费观看亚洲欧美 | 国产精品免费不卡 | 欧美在线一级片 | 美国av大片 | 久久,天天综合 | 日韩性久久 | 草樱av| 操操操日日日干干干 | 永久黄网站色视频免费观看w | 日韩免费视频线观看 | 成人永久视频 | av电影免费 | 97人人澡人人爽人人模亚洲 | 综合色中文 | 中文字幕刺激在线 | 色婷婷国产精品一区在线观看 | 美女啪啪图片 | 五月天电影免费在线观看一区 | 色香蕉在线 | 99re国产视频 | 奇米影视8888 | 国产日韩在线播放 | 五月天天av | 波多野结衣最新 | 亚洲国产中文字幕在线观看 | 国产精品刺激对白麻豆99 | 麻豆av一区二区三区在线观看 | 日韩在线观看视频一区二区三区 | 91成人午夜 | 亚洲视频免费在线 | 国内丰满少妇猛烈精品播 | 欧美成人高清 | 欧美性色xo影院 | 国产自在线观看 | 99精品系列 | 亚洲欧美日本一区二区三区 | 美女天天操 | 亚洲国产视频直播 | 97视频在线免费观看 | ww亚洲ww亚在线观看 | www日韩在线观看 | 久久久久久久久久久高潮一区二区 | 天天摸夜夜操 | 91精品国产99久久久久久红楼 | 国产精品免费久久久 | 日韩一级片大全 | 在线色视频小说 | 91在线一区 | 激情小说网站亚洲综合网 | 国产一区二区手机在线观看 | 高清中文字幕av | 国产一区二区网址 | 国产一区二区在线看 | 欧美一级性视频 | 免费久久网| 日韩网站在线免费观看 | 亚洲三级视频 | 99re在线视频观看 | 中文字幕 国产视频 | 久久精品精品电影网 | 国产成人精品一区二区三区福利 | 久久99电影| 亚洲经典在线 | 综合色在线观看 | 日韩欧美综合在线视频 | 国产 在线 高清 精品 | 爱色av.com| 久久这里有 | 精品国产乱码久久久久久1区二区 | 国产午夜在线 | 国产亚洲精品av | 亚洲黄污 | 欧美少妇影院 | 日韩国产精品一区 | 少妇性aaaaaaaaa视频 | 国产精品麻豆99久久久久久 | 色婷婷视频在线 | 四虎在线视频 | 91精品国产麻豆 | 成人激情开心网 | 99久久精品电影 | 国产精品福利久久久 | 久久xx视频| 久久久久9999亚洲精品 | 欧美日韩色婷婷 | 久久国产热 | 天天插天天操天天干 | 日本三级全黄少妇三2023 | a级国产片 | 看v片| 亚洲精品在线二区 | 韩国精品福利一区二区三区 | 久久久久久久久福利 | 国产精品久久久久久久久久了 | 999成人| 在线观看国产亚洲 | 国产一区在线免费 | 成人一区二区在线 | 在线观看av国产 | 成人全视频免费观看在线看 | 欧美成年人在线视频 | 白丝av在线 | 欧美日本日韩aⅴ在线视频 插插插色综合 | 超碰97成人 | 五月开心激情 | 亚洲 欧美 成人 | 青草视频在线免费 | 手机看片午夜 | 国产精品观看 | 亚洲成av人片在线观看香蕉 | 不卡的av| 亚洲精品91天天久久人人 | 国产精品一区二区av影院萌芽 | 日韩久久一区二区 | 九九热国产 | 国产视频一二三 | 99精品欧美一区二区三区 | 一区二区三区 亚洲 | 伊人狠狠色| 日韩久久久久久久久久 | 日韩欧美高清一区二区 | 婷婷六月色 | 亚洲视频免费在线观看 | 在线精品一区二区 | 婷婷www | 国色天香永久免费 | 亚洲成人黄色av | 色综合天天在线 | 久久激情精品 | 亚洲电影一级黄 | 久草久草视频 | 欧美中文字幕久久 | 免费成人在线观看视频 | 国产乱视频 | 欧美日韩中文在线观看 | 色综合天天狠狠 | 777xxx欧美 | 国产中文 | 国产精品久久久免费看 | 国产精品免费观看久久 | 久久久久久福利 | 亚洲一区动漫 | 久久天天躁狠狠躁亚洲综合公司 | 婷婷综合 | 日韩小视频网站 | 亚洲最新av网站 | 国产美女主播精品一区二区三区 | 伊人久久av| 久久任你操 | 欧美日韩一级视频 | 免费在线电影网址大全 | 97成人精品视频在线观看 | 久久久久久久99 | 视频在线99 | 在线三级播放 | 亚洲一区二区三区在线看 | 国产一区二区三区高清播放 | 日韩中文在线电影 | 亚洲粉嫩av | 免费看污黄网站 | 欧美一级电影 | 国产亚洲精品女人久久久久久 | 日本中文字幕网 | 中文字幕在线专区 | 色婷婷天天干 | 99久久影视 | 国产在线一区二区三区播放 | 97电影网手机版 | 国产无遮挡又黄又爽在线观看 | www.黄色小说.com | 国产精品正在播放 | 久久精品视频在线观看 | 黄污网| 天天爱天天射天天干天天 | 亚洲国产午夜 | 亚洲精品国产日韩 | 国产成人a亚洲精品v | 久久福利在线 | 在线观看www91 | 黄色大片入口 | 国产一区免费视频 | 国产精品video爽爽爽爽 | 欧美一级免费在线 | 福利电影久久 | 国产免费资源 | 精品在线二区 | 性日韩欧美在线视频 | 国产精品免费在线播放 | 久久手机在线视频 | 欧美一区免费在线观看 | 99超碰在线播放 | 亚洲国产片色 | 中文字幕网站视频在线 | 超碰97网站| 色婷婷99 | 亚洲美女久久 | 97视频亚洲 | 91精品国产欧美一区二区成人 | av五月婷婷 | 日本公妇在线观看 | av免费电影在线 | 美女视频黄的免费的 | 超碰人人舔| 精品一二三四在线 | 精品国产乱子伦一区二区 | 国产精品 国内视频 | 中文字幕专区高清在线观看 | 久久久一本精品99久久精品66 | 亚洲成人麻豆 | 久久免费视频2 | 午夜日b视频 | 日本xxxxav| 久久亚洲区 | 黄色免费视频在线观看 | 国产粉嫩在线 | 中文久草 | 欧美三人交 | 亚洲人成人在线 | av电影在线观看完整版一区二区 | 日产乱码一二三区别在线 | 精品一区二区在线看 | 国产福利一区二区三区视频 | 一区二区中文字幕在线 | 国产精品久久久久久久久久东京 | 午夜精品久久久久久久99 | 亚洲日本欧美 | 久久色在线观看 | 中文字幕在线播放一区 | 国产视频网站在线观看 | 久久精品国产精品亚洲精品 | 国产网站av| 成年美女黄网站色大片免费看 | 韩日在线一区 | 免费国产黄线在线观看视频 | 成人av免费在线播放 | 免费裸体视频网 | 99在线热播精品免费 | 亚洲成av人片在线观看无 | 99综合电影在线视频 | 亚洲精品视频免费在线 | 国产精品久久久久久一二三四五 | 欧美动漫一区二区三区 | 国产福利在线免费观看 | 日日摸日日爽 | 麻豆久久久久久久 | 在线成人免费 | 中文字幕日本特黄aa毛片 | 欧美午夜精品久久久久 | 国产精品永久免费视频 | 国产色爽| av电影免费在线看 | 婷婷丁香花 | 久久久网站 | 亚洲一级久久 | 一区二区三区在线免费观看 | 一区二区视频在线免费观看 | 少妇性aaaaaaaaa视频 | 婷婷国产在线 | 婷婷免费在线视频 | 国产在线欧美在线 | 亚洲综合国产精品 | 人人草人| 9幺看片| 国产高清视频在线播放一区 | 97香蕉视频 | 91精品国自产在线观看欧美 | 国产一区视频在线观看免费 | 91九色在线观看视频 | 成人av一区二区在线观看 | 五月天中文在线 | 久久免费中文视频 | 久久人人爽人人爽人人片av免费 | 波多野结衣久久精品 | 亚洲另类久久 | 久草视频免费在线播放 | 在线观看免费国产小视频 | 国产美腿白丝袜足在线av | 在线观看免费av网 | 国产区av在线 | 91在线小视频 | a级免费观看| 亚洲在线a | 成人av动漫在线 | 国产福利精品一区二区 | 国产精品va最新国产精品视频 | 天天摸天天弄 | 在线看欧美 | av国产网站 | 国产精品成人一区二区 | 久久国色夜色精品国产 | 色婷婷国产在线 | 久久久久久免费视频 | 国产在线观看网站 | 免费网站在线观看人 | 91爱看片| 国产欧美日韩精品一区二区免费 | 少妇bbw揉bbb欧美 | 久久久精品网站 | 亚洲精品www久久久 www国产精品com | 99婷婷狠狠成为人免费视频 | 国产不卡在线 | 国产精品1区2区在线观看 | 亚洲精品一区二区三区新线路 | 精品国产免费av | 伊人亚洲精品 | 四虎永久免费网站 | 国产成人精品一区二区三区网站观看 | 国产在线观看免费av | 九九九在线观看 | 色狠狠一区二区 | 2020天天干天天操 | 久久一区二 | 狠狠色综合欧美激情 | 69精品人人人人 | 久久久午夜精品福利内容 | 在线观看国产高清视频 | 亚洲国产精品va在线看黑人动漫 | 国产色婷婷在线 | 欧美色一色 | 亚洲色图22p | 久久精品久久精品久久精品 | 激情影音 | 成人一区二区在线观看 | 天天干天天在线 | 日韩r级在线 | 五月天久久狠狠 | 国产精品一区二区在线播放 | 亚洲va欧美va人人爽 | 久久中文字幕在线视频 | 日韩精品视频在线免费观看 | 视频在线精品 | 日韩欧美在线免费观看 | 中文字幕在线观看av | 97精品国产91久久久久久 | 国产香蕉av | 日韩女同av | 99精品在线直播 | 国产三级精品三级在线观看 | 五月天婷婷狠狠 | 成人在线一区二区 | 天天操夜夜想 | 天天天天天天天操 | 欧美在线91| 亚洲国产精品久久久 | 丁香花在线视频观看免费 | 91九色视频网站 | 99国内精品 | 国产精品久久久久久久午夜 | 亚洲天堂网站视频 | 国产在线中文 | 精品视频免费久久久看 | 四虎在线免费 | 亚洲综合在线视频 | 三级视频日韩 | 久久综合色播五月 | 成人午夜片av在线看 | 国产精品99免费看 | 久热电影| 国产午夜三级 | 骄小bbw搡bbbb揉bbbb | 日韩精品一区电影 | 一区二区三区四区五区六区 | 天天操天天射天天爱 | 天天摸日日摸人人看 | av观看在线观看 | 中文字幕在线观看网 | 中文字幕一区二区三区在线播放 | 免费网站在线观看人 | www.久久免费视频 | 91欧美在线 | 久久男人免费视频 | 久久久久久久久久影视 | 国产高清专区 | 丁香高清视频在线看看 | a级国产乱理论片在线观看 特级毛片在线观看 | 色搞搞| 国产一区国产二区在线观看 | 黄污视频网站大全 | 在线精品观看国产 | 国产一区二区三区高清播放 | 操操碰 | 欧美日韩一区二区免费在线观看 | 亚洲精品视频在线观看免费视频 | 国产成人精品一二三区 | 99精品国产一区二区 | 97超碰总站| 在线免费国产视频 | 狠狠插狠狠干 | 夜色在线资源 | 成年人av在线播放 | 久久久亚洲网站 | 日韩精品久久久久久 | 国产精品久久久久久久久搜平片 | 国产96精品 | www.91国产 | 99在线热播精品免费99热 | 综合婷婷| 亚洲最新av网站 | 99久久精品免费看国产麻豆 | 精品久久九九 | 玖玖999 | 日韩高清成人 | 国产精品久久久久久久久久久久 | 97理论片| 国产少妇在线观看 | 免费观看av | 国产免费叼嘿网站免费 | 欧女人精69xxxxxx | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 99精品视频在线免费观看 | 国产手机av | 热久久视久久精品18亚洲精品 | 久久久久久久久久毛片 | 中文字幕乱码在线播放 | 一区二区三区日韩在线观看 | 免费视频网| 久草精品视频在线播放 | 日韩欧美不卡 | 久久久久久久久久久免费av | 99热在线这里只有精品 | 91最新视频在线观看 | 久久综合精品一区 | 能在线观看的日韩av | 激情视频综合网 | 97人人模人人爽人人少妇 | 视频一区二区国产 | 色综合网在线 | 欧美俄罗斯性视频 | 久久久国产精品一区二区中文 | 探花视频在线观看+在线播放 | 色婷婷导航 | 久久久久二区 | 亚洲成av人影院 | 免费观看久久 | 在线v片| 色综合久久久久综合体桃花网 | 人人讲下载 | 91中文字幕网| 色就色,综合激情 | 夜夜澡人模人人添人人看 | 久久精品欧美一区 | 麻豆视频免费播放 | a爱爱视频 | 97涩涩视频 | 深夜福利视频在线观看 | 国产玖玖在线 | 国产麻豆剧果冻传媒视频播放量 | 日韩av影视在线观看 | 性色av免费观看 | 91高清在线| 在线视频日韩 | 久久人人爽人人爽人人 | 97超碰资源 | 97超碰精品 | 91精品一区二区三区蜜桃 | 欧美精品乱码久久久久久按摩 | 久久久久日本精品一区二区三区 | 中文字幕一区二区三区乱码不卡 | 欧美在线观看禁18 | 国产打女人屁股调教97 | 国产精品久久久久久久久久久杏吧 | 国产区第一页 | 九九热av | 人人爽人人爽人人片av免 | 色综合天天视频在线观看 | 久久久久国产精品厨房 | 欧美另类视频 | 天天综合色天天综合 | 亚洲资源视频 | 免费成人av| 亚洲视频 在线观看 | 99视频在线精品国自产拍免费观看 | 在线播放视频一区 | 久久精品综合网 | av天天澡天天爽天天av | 夜夜躁天天躁很躁波 | 久草青青在线观看 | 69绿帽绿奴3pvideos | 美女视频黄网站 | a爱爱视频| 在线视频1卡二卡三卡 | 亚洲精区二区三区四区麻豆 | 久久观看免费视频 | 婷婷色五 | 99热99热| 日韩欧美高清 | 天堂在线一区二区 | 99久久精品国产一区二区成人 | 97免费在线观看 | 国产成人一二三 | www视频免费在线观看 |