이것은 Ubuntu Online, Fedora Online, Windows 온라인 에뮬레이터 또는 MAC OS 온라인 에뮬레이터와 같은 여러 무료 온라인 워크스테이션 중 하나를 사용하여 OnWorks 무료 호스팅 제공업체에서 실행할 수 있는 mips64el-linux-gnuabi64-gcc-5 명령입니다.
프로그램:
이름
gcc - GNU 프로젝트 C 및 C++ 컴파일러
개요
gcc [-c|-S|-E] [-표준=품질 ]
[-g] [-페이지] [-O수평]
[-W경고...] [-Wpedantic]
[-IDIR...] [-LDIR...]
[-D매크로[=데프]...] [-U매크로]
[-foption...] [-m기계 옵션...]
[-o 아웃파일] [@파일] 인파일...
가장 유용한 옵션만 여기에 나열됩니다. 나머지는 아래를 참조하십시오. g ++ 받아 들인다
대부분 동일한 옵션 GCC.
기술
GCC를 호출하면 일반적으로 전처리, 컴파일, 어셈블리 및 연결을 수행합니다.
"전체 옵션"을 사용하면 중간 단계에서 이 프로세스를 중지할 수 있습니다. 을위한
예를 들어 -c 옵션은 링커를 실행하지 말라고 말합니다. 그런 다음 출력은 객체로 구성됩니다.
어셈블러가 출력하는 파일.
다른 옵션은 처리의 한 단계로 전달됩니다. 일부 옵션 제어
전처리기 및 기타 컴파일러 자체. 또 다른 옵션은 어셈블러를 제어하고
링커; 이들 중 대부분은 사용할 필요가 거의 없기 때문에 여기에 문서화되어 있지 않습니다.
GCC와 함께 사용할 수 있는 대부분의 명령줄 옵션은 C 프로그램에 유용합니다. 언제
옵션은 다른 언어(보통 C++)에서만 유용합니다. 설명에 따르면
명시적으로. 특정 옵션에 대한 설명에 출처가 언급되지 않은 경우
언어의 경우 지원되는 모든 언어에서 해당 옵션을 사용할 수 있습니다.
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 GCC 프로그램은 옵션과 파일 이름을 피연산자로 받아들입니다. 많은 옵션에는 다중
문자 이름; 따라서 여러 단일 문자 옵션은 지원 그룹화: -dv 이 매우
다른 -d -v.
옵션과 기타 인수를 혼합할 수 있습니다. 대부분의 경우 사용하는 순서는
문제. 같은 종류의 여러 옵션을 사용할 때는 순서가 중요합니다. 예를 들어
당신이 지정 -L 두 번 이상 디렉토리는 지정된 순서대로 검색됩니다. 또한,
의 배치 -l 옵션이 중요합니다.
많은 옵션에는 다음으로 시작하는 긴 이름이 있습니다. -f 또는 -W---예를 들어,
-fmove-loop-불변, -W포맷 등등. 이들 대부분은 긍정적인 것과 부정적인
양식; 의 부정적인 형태 - 푸푸 is -fno-foo. 이 설명서는 다음 중 하나만 문서화합니다.
두 가지 형식 중 하나가 기본값이 아닌 형식입니다.
옵션
선택권 요약
다음은 유형별로 그룹화된 모든 옵션의 요약입니다. 설명은 다음과 같습니다
섹션을 참조하십시오.
사무용 겉옷 옵션
-c -S -E -o 파일 -표준 접두사 없음 -파이프 -통과 종료 코드 -x 언어 -v
-### --도움[=수업[, ...]] -타겟 홀프 --번역 -싸개 @파일 -f플러그인=파일
-fplugin-인수-name=아르헨티나 -fdump-ada-spec[-날씬한] -fada-사양-부모=단위
-fdump-go-spec=파일
C 지원하는 언어 옵션
-안시 -표준=품질 -fgnu89-인라인 -보조 정보 파일 이름
- 휴경 매개변수 없는 가변 함수 -fno-asm -fno 내장 -fno-내장-기능
-호스트 -프리스탠딩 -fopenacc -fopenmp -fopenmp-simd -fms-확장
-fplan9-확장 -삼각형 -전통적인 -전통적인 cpp - 휴경단정밀도
-fcond-불일치 -아마 벡터 변환 -fsigned 비트 필드 -fsigned-char
- funsigned 비트 필드 -funsigned-char
C + + 지원하는 언어 옵션
-fabi 버전=n -fno-액세스 제어 -fcheck-신규 -fconstexpr-깊이=n
-ffriend 주입 -fno-elide-생성자 -fno-enforce-eh-specs -ffor 범위
-범위에 대한 fno -fno-gnu-키워드 -fno-암시적 템플릿
-fno-implicit-inline-템플릿 -fno-구현-인라인 -fms-확장
-fno-nonansi-내장 -fnothrow-opt -fno 연산자 이름 -fno-선택 사항-diags
-허용 -fno-pretty-템플릿 -프레포 -fno-rtti -fsize-deallocation -fstats
-ftemplate-역추적 제한=n -f템플릿-깊이=n -fno-threadsafe-정적
-퓨즈 -cxa-atexit -fno-약한 -nostdinc++ -fvisibility-inlines-hidden
-fvtable-확인=[표준|미리|없음] -fvtv-카운트 -fvtv-디버그 -fvisibility-ms-compat
-fext-숫자-리터럴 -와비=n -와비태그 -wconversion-null. -Wctor-dtor-프라이버시
-Wdelete-non-virtual-dtor -문자 접미사 - 축소 -아니요 -W비 가상 dtor
- Wreorder -웨프씨++ -Wstrict-null-센티넬 - 템플릿이 아닌 친구 -Wold 스타일 캐스트
-오버로딩된 가상 -Wno-pmf-변환 -Wsign-프로모션
오브젝티브-C and 목표-C++ 지원하는 언어 옵션
-f상수-문자열-클래스=클래스 이름 -fgnu-런타임 -fnext-런타임 -fno-nil-수신기
-fobjc-abi-버전=n -fobjc-call-cxx-cdtors -fobjc-직접 발송 -fobjc-예외
-fobjc-gc -fobjc-nilcheck -fobjc-std = OBJC1. -fno-local-ivars
-fivar-가시성=[공개|보호|사설|꾸러미] -freplace-objc-클래스
-fzero-링크 -gen-decls -Wassign-인터셉트 -Wno 프로토콜 -W선택자
-Wstrict 선택자 일치 -Wunddeclared-선택자
지원하는 언어 독립 옵션
-f메시지 길이=n -fdiagnostics-표시-위치=[일단|모든 라인]
-fdiagnostics-색상=[자동|못|항상] -fno-진단-쇼-옵션
-fno-diagnostics-show-caret
경고 옵션
-fsyntax 전용 -fmax-오류=n -Wpedantic - 현학적 오류 -w -웩스트라 -벽
-워드레스 -Waggregate-리턴 -왜곡 루프 최적화 -워레이 경계
-워레이 경계=n -Wbool-비교 -Wno-속성 -Wno 내장 매크로 재정의
-Wc90-c99-호환 -Wc99-c11-호환 -Wc++-호환 -Wc++11-호환 -Wc++14-호환
-Wcast 정렬 -Wcast급 -Wchar-첨자 -클로버드 -댓글
- 조건부 지원 -W변환 -Wcoverage-불일치 -W날짜-시간
-W삭제-불완전 -Wno-cpp - 더 이상 사용되지 않음 -Wno-deprecated-선언
-Wno 지정 초기화 -Wdisabled-최적화 -폐기되지 않는 한정자
- Wno-discarded-array-qualifiers -Wno-div-by-XNUMX -W더블 프로모션 - 멍한 몸
-Wenum-비교 -Wno-endif-레이블 -워러 -오류=* -Wfatal-오류 -Wfloat-같음
-W포맷 -W형식=2 -Wno-포맷-포함-nul -Wno-format-extra-args
-Wformat-비리터럴 -Wformat 보안 -Wformat 서명 -Wformat-y2k
-Wframe-보다 큼=렌 -Wno-free-nonheap-객체 -Wjump-미스-초기화
-무시 예선 -Wincompatible-포인터 유형 - 암묵적
-암시적 함수 선언 - 암묵적 정수 -윈트셀프 -윈라인
-Wno-int-변환 - 포인터 투 포인터 캐스트 없음 -Wno-invalid-offsetof -Winvalid-pch
-보다 큼=렌 -Wunsafe 루프 최적화 -W논리적 연산 -Wlogical-not-괄호
-롱롱 -W메인 -W아마도 초기화되지 않음 -Wmemset-transposed-args -Wmissing-중괄호
-Wmissing-field-initializers - 포함 디렉토리 누락 -Wno-다중 문자 -Wnonnull
- 정규화 =[없음|id|NFC|nfkc]
-우드르 -Wno 오버플로 -Wopenmp-simd -Woverlength-문자열 -W포장
-Wpacked-bitfield-compat -W패딩 -괄호 -Wpedantic-ms-형식
-Wno-pedantic-ms-형식 -Wpointer-arith - Wno-pointer-to-int-cast - Wredundant-decls
-Wno-return-local-addr -Wreturn형 -W시퀀스 포인트 -W섀도우 -Wno-shadow-ivar
-Wshift-count-음수 -Wshift-count-overflow -Wsign-비교 -Wsign 변환
-Wfloat 변환 -Wsizeof-pointer-memaccess -Wsizeof-배열 인수
-Wstack 보호기 -Wstack 사용=렌 -Wstrict-앨리어싱 -Wstrict-앨리어싱=n
-Wstrict 오버플로 -Wstrict-오버플로=n -Wsuggest-속성=[순수한|const를|노리턴|체재]
-Wsuggest-최종 유형 -Wsuggest-최종 방법 -Wsuggest 재정의
-Wmissing 형식 속성 -W스위치 -Wswitch-기본값 -Wswitch 열거 형 -Wswitch-부울
-Wsync-낸드 -Wsystem 헤더 - 트램폴린 -저서 -W 유형 제한 -분데프
-초기화되지 않음 -Wunknown-pragma -Wno-pragma -Wunsuffixed 부동 소수점 상수
- 사용하지 않은 - 사용하지 않는 기능 -사용하지 않은 라벨 -Wunused-local-typedefs -Wunused-매개변수
- 사용하지 않은 결과 없음 - 미사용 가치 - 사용하지 않은 변수 -사용하지 않았지만 설정 매개변수
-사용하지 않았지만 설정 변수 -쓸데없는 캐스팅 -Wvariadic 매크로
-W벡터 작업 성능 - 블라 -W휘발성 레지스터 변수 -문자열 쓰기
-Wzero-as-null-포인터 상수
C and Objective-C 전용 경고 옵션
-Wbad 함수 캐스트 -Wmissing-선언 -Wmissing-매개변수 유형
-Wmissing-프로토타입 -Wnested-externs -Wold 스타일 선언 -Wold 스타일 정의
-Wstrict 프로토타입 -전통적인 -전통 변환
-W선언 후 선언 -Wpointer 기호
디버깅 옵션
-d편지 -덤프 사양 - 덤프 머신 -덤프 버전 -f위생처리=스타일 -fsanitize-복구
-fsanitize-복구=스타일 -fasan-그림자 오프셋=번호
-fsanitize-정의되지 않은-트랩-오류 -fcheck 포인터 경계 -fchkp-검사-불완전 유형
-fchkp-first-field-has-own-bounds -fchkp-좁은 경계
-fchkp-좁은 배열부터 가장 안쪽 배열 -fchkp-최적화 -fchkp-use-fast-string-functions
-fchkp-use-nochk-문자열 기능 -fchkp-사용-정적-경계
-fchkp-use-static-const-bounds -fchkp-XNUMX-동적 크기를 무한대로 처리
-fchkp-체크-읽기 -fchkp-체크-읽기 -fchkp-체크-쓰기 -fchkp-저장-경계
-fchkp-계측기 호출 -fchkp-기기 표시 전용 -fchkp-use-래퍼
-fdbg-cnt-목록 -fdbg-cnt=반대 가치 목록 -fdisable-ipa-패스 이름
-fdisable-rtl-패스 이름 -fdisable-rtl-비밀번호=범위 목록 -fdisable-트리-패스 이름
-fdisable-트리-비밀번호=범위 목록 -fdump-noaddr -fdump-번호 없음
-fdump-unnumbered-링크 -fdump-번역-단위[-n] -fdump-클래스-계층 구조[-n]
-fdump-ipa-모두 -fdump-ipa-cgraph -fdump-ipa-인라인 -fdump-pass -fdump-통계
-fdump-트리-모두 -fdump-트리-원본[-n] -fdump-tree 최적화[-n] -fdump-트리-cfg
-fdump-트리 별칭 -fdump-트리-ch -fdump-트리-ssa[-n] -fdump-트리-pre[-n]
-fdump-트리-ccp[-n] -fdump-트리-dce[-n] -fdump-tree-gimple[-노골적인] -fdump-트리돔[-n]
-fdump-트리-dse[-n] -fdump-트리-phiprop[-n] -fdump-트리-phiopt[-n]
-fdump-트리-forwprop[-n] -fdump-tree-copy이름 바꾸기[-n] -fdump-트리-nrv -fdump-트리-벡터
-fdump-트리 싱크 -fdump-트리-sra[-n] -fdump-트리-forwprop[-n] -fdump-tree-fre[-n]
-fdump-tree-vtable-검증 -fdump-트리-vrp[-n] -fdump-트리-storeccp[-n]
-fdump-최종-insns=파일 -fcompare-디버그[=선택하지 않는] -f비교-디버그-초
-felimate-dwarf2-dups -fno-제거-unused-debug-types
-feliminate-unused-debug-기호 -femit-class-debug-항상 -합리적인-종류-패스
-합리적인-종류-패스=범위 목록 -fdebug-types-섹션 -fmem-보고서-wpa -fmem 보고서
-fpre-ipa-mem-보고서 -fpost-ipa-mem-보고서 -fprofile-호 -fopt-정보
-fopt-정보-옵션[=파일] -임의의 시드=번호 -fsched-상세=n -fsel-sched-verbose
-fsel-sched-dump-cfg -fsel-sched-파이프라인-상세 -fstack-사용 -최후 범위
-ftime-보고 -fvar 추적 -fvar-추적 할당
-fvar-추적-할당-전환 -g -g수평 -gttoggle -gcoff -그드워프-버전 -ggdb
-grecord-gcc-스위치 -gno-record-gcc-스위치 -gstabs -gstabs + -gstrict-dwarf
-gno-strict-dwarf -gvms -gxcoff -gxcoff+ -gz[=유형] -fno-병합-디버그-문자열
-fno-dwarf2-cfi-asm -fdebug-접두사-맵=낡은= -femit-struct-debug-baseonly
-femit-struct-debug-reduced -femit-struct-debug-detailed[=사양 목록] -p -페이지
-인쇄 파일 이름=도서관 -print-libgcc-파일 이름 - 인쇄 다중 디렉토리
-print-multi-lib -print-multi-os-디렉토리 -인쇄 프로그램 이름=프로그램
-인쇄-검색-디렉토리 -Q -인쇄-sysroot -인쇄-sysroot-헤더-접미사 - 임시 저장
- 임시 저장 = cwd - 임시 저장 = obj -시각[=파일]
최적화 옵션
- faggressive-loop-optimizations -falign-함수[=n] -falign-점프[=n]
-falign-레이블[=n] -정렬 루프[=n] -연관 수학 -fauto 프로필
-fauto 프로필[=통로] -fauto-inc-dec -f분기 확률
-fbranch-대상-로드-최적화 -fbranch-대상-로드-최적화2 -fbtr-bb-독점
-fcaller 저장 -fcheck-데이터-deps -fcombin-stack-adjustments -fconserve-스택
-f비교-제거 -fcprop 레지스터 -크로스점프 -fcse-추종-점프 -fcse-skip-blocks.
-fcx-fortran-규칙 -fcx 제한 범위 -fdata 섹션 -fdce -fdelayed-분기
-fdelete-null-포인터 검사 -f비가상화 -fdevirtualize-추측적으로
-fdevirtualize-at-ltrans -fdse -두려운 인라인 -피파-스라 -비싼 최적화
-ffat-lto-객체 -빠른 수학 - 유한 수학 전용 -fffloat-store
-fexcess-정밀도=스타일 -앞으로 전파 -ffp-계약=스타일 -ffunction-섹션
-fgcse -fgcse-재로드 후 -fgcse-las -fgcse-lm -fgraphite-정체성 -fgcse-sm
-fhoist-인접 하중 -fif 변환 -fi-변환2 -findirect 인라인
-finline-함수 -finline-functions-call-once -finline-한계=n
-finline-작은 기능 -fipa-cp -fipa-cp-클론 -fipa-cp-정렬 -fipa-pta
-fipa 프로필 -fipa-순수-const -fipa-참조 -fipa-icf -피라 알고리즘=연산
-피라 지역=지방 -피라-호이스트-압력 -피라 루프 압력 -fno-ira-공유-저장-슬롯
-fno-ira-share-spill-slots -Fira-장황한=n -분리-오류-경로-역참조
-분리-오류-경로-속성 -fivopts -fkeep 인라인 함수
-fkeep-static-const - 플라이 레인지 수축 -floop-블록 - 루프 교환
-floop-스트립-광산 -플루프 풀기 및 걸림 -floop-nest-최적화 -floop-병렬화-모두
-fla-remat -flto -flto 압축 수준 -flto-파티션=ALG -flto-보고
-flto-보고-wpa -fmerge-all-상수 -fmerge-상수 -fmodulo-sched
-fmodulo-sched-allow-regmoves -fmove-loop-불변 -fno-브랜치-카운트-reg
-fno-지연-팝 -fno-기능-cse -fno-추측-분기-확률 -fno 인라인
-fno-수학-errno -fno 엿보기 -fno-구멍2 -fno-sched-인터블록 -fno-sched-spec
-fno 부호 있는 XNUMX -fno-최상위-재주문 -fno 트래핑 수학
-fno-zero-initialized-in-bss -fomit 프레임 포인터 -foptimize-형제 호출
-f부분 인라인 -필 루프 -f예측-공통 -fprefetch 루프 배열
-fprofile-보고 -fprofile-수정 -f프로필-디렉토리=통로 -fprofile 생성
-fprofile 생성=통로 -fprofile-사용 -f프로필 사용=통로 -fprofile-값
-fprofile-재주문-기능 - 분수 수학 -비어 있는 -frename 레지스터
-freorder-블록 -freeorder-blocks-and-partition -freorder-함수
-frerun-cse-후-루프 -freschedule-modulo-scheduled-loops - 반올림 수학
-fsched2-use-수퍼블록 -fsched-압력 -fsched-사양-로드
-fsched-spec-load-위험한 -fsched-stalled-insns-dep[=n] -fsched-stalled-insns[=n]
-fsched-group-휴리스틱 -fsched-critical-path-휴리스틱 -fsched-spec-insn-휴리스틱
-fsched-rank-휴리스틱 -fsched-last-insn-휴리스틱 -fsched-dep-count-휴리스틱
-fschedule-퓨전 -fschedule-insns -fschedule-insns2 -f섹션 앵커
-f선택적 스케줄링 -f선택적-스케줄링2 -fsel-sched-파이프라이닝
-fsel-sched-파이프라인-외부 루프 -의미론적 삽입 -fshrink-wrap
-fsignaling-nans -fsingle-precision-상수 -fsplit-ivs-in-unroller
-fsplit-와이드 유형 -fssa-phiopt -fstack 보호기 -fstack-프로텍터-all
-fstack-보호자-강한 -fstack-보호자-명시적 -fstdarg-opt -fstrict-앨리어싱
-fstrict-오버플로 -fthread 점프 -추적자 -ftree-bit-ccp -ftree-내장 호출-dce
-fttree-ccp -fttree-ch -ftree-coalesce-inline-vars -ftree-coalesce-vars -ftree 복사 소품
-ftree-copy이름 바꾸기 -fttree-dce -ftree-지배자-opts -fttree-dse -fttree-forwprop
-fttree-fre -ftree-loop-if-변환 -ftree-loop-if-convert-stores -ftree-루프-im
-fttree-phiprop -ftree-loop-분포 -ftree-루프-배포-패턴
-ftree-루프-ivcanon -ftree 루프 선형 -ftree 루프 최적화 -ftree 루프 벡터화
-ftree 병렬화 루프=n -fttree-pre -ftree-부분 사전 -fttree-pta -fttree-재연결
-ftree-싱크대 -fttree-slsr -fttree-sra -ftree 스위치 변환 -fttree-tail-merge
-fttree-ter -ftree 벡터화 -fttree-vrp -한 번에 단위 -Funroll-All-루프
-펀롤 루프 -펀세이프 루프 최적화 -재미있는 수학 최적화
-펀스위치 루프 -피파라 -f변수 확장-언롤러 -fvect-비용 모델 -fvpt
-fweb -전체 프로그램 -fwpa -퓨즈-링커-플러그인 --매개변수 name=가치 -O -O0 -O1 -O2
-O3 - 오스 -오파스트 -오그
전 처리기 옵션
-A문제=답변 -에이-문제[=답변] -C -dD -디 -dM -NS -D매크로[=데프] -E -H
-idirafter DIR -포함 파일 -매크로 파일 -ipprefix 파일 -iwith 접두사 DIR
-앞에 접두사가 있는 경우 DIR -아이시스템 DIR -imultilib DIR -isysroot DIR -M -MM -MF -mg
- MP -MQ -산 -Nostdinc -P -fdebug-cpp -ftrack 매크로 확장 -fworking-디렉토리
-다시 매핑 -삼각형 -언데프 -U매크로 -워,option -엑스프리프로세서 option -통합되지 않은-cpp
어셈블러 선택권
-와,option -X어셈블러 option
링크 옵션
개체 파일 이름 -퓨즈-ld=링크 -l도서관 -nostart파일 -nodefaultlibs -nostdlib
-파이 -역동적 -s -공전 -정적-libgcc -정적-libstdc++ -정적-리바산
-정적-libtsan -정적-liblsan -정적-libubsan -정적-libmpx -정적-libmpxwrappers
-공유 -공유-libgcc - 상징적 -T 스크립트 -NS,option -X링커 option -u 상징 -z
키워드는
명부 담당 옵션
-B접두사 -IDIR -iplugindir=DIR - 인용DIR -LDIR -사양=파일 -나는- --sysroot=DIR
--no-sysroot-접미사
머신 매달린 옵션
AAArch64 옵션 -마비=name -mbig-엔디안 -미리틀 엔디안 -mgeneral-regs-only.
-mcmodel=작은 -mcmodel=작은 -mcmodel=대형 -mstrict-정렬 -momit-리프 프레임 포인터
-mno-생략-리프-프레임-포인터 -mtls-dialect=desc -mtls-dialect=전통
-mfix-cortex-a53-835769 -mno-fix-cortex-a53-835769 -mfix-cortex-a53-843419
-mno-fix-cortex-a53-843419 -행진=name -mcpu =name -mtune=name
아답테바 출현 옵션 -mhalf-reg-파일 -mprefer-짧은-insn-regs -mbranch 비용=NUM
-mcmmove -mnops=NUM -msoft-cmpsf -msplit-lohi -mpost-inc -mpost 수정
-mstack 오프셋=NUM -mround-가장 가까운 -mlong-통화 -m짧은 통화 -msmall16 -mfp 모드=모드
-mvect-더블 -최대 벡터 정렬=NUM -msplit-vecmove-early -m1reg-등록 번호
ARC 옵션 -mbarrel-shifter -mcpu =CPU -mA6 -mARC600 -mA7 -mARC700 -mdpfp
-mdpfp-컴팩트 -mdpfp-빠른 -mno-dpfp-lrsr -메아 -mno-mpy -mmul32x16 -mmul64 -일반
-mspfp -mspfp-컴팩트 -mspfp-빠른 -msimd -msoft-float -mswap -mcrc -mdsp-패카 -mdvbf
-mlock -mmac-d16 -mmac-24 -mrtsc -mswap -전화 -mxy -사이즈를 잘못 맞추다 -mannotate 정렬
-마크리눅스 -marclinux_prof -mepilogue-cfi -mlong-통화 -중간 통화 -msdata
-mucb-mcount -m휘발성 캐시 -악성 호출 -mauto-수정-reg -mbbit-구멍 -mno-brcc
-mcase-벡터-pcrel -mcompact-casesi -mno-조건-exec -거의-cbranchsi -mexpand-adddi
-mindexed 로드 -mlra -mlra-우선순위-없음 -mlra-우선순위-컴팩트 mlra-우선순위-
비컴팩트 -mno-밀리코드 -mm혼합 코드 -mq 클래스 -mRcq -mRcw -msize 수준=수평
-mtune=CPU -다중 비용=NUM -munalign-prob-임계값=확률
ARM 옵션 -mapcs-프레임 -mno-apcs-프레임 -마비=name -mapcs-스택-체크
-mno-apcs-스택-체크 -mapcs-플로트 -mno-apcs-플로트 -mapcs-재진입
-mno-apcs-재진입 -msched-프롤로그 -mno-sched-프롤로그 -미리틀 엔디안 -mbig-엔디안
-mfloat-abi=name -mfp16 형식=name -mthumb-연동 -mno-thumb-연동 -mcpu =name
-행진=name -mfpu=name -mtune=name -mprint-조정-정보 -m구조-크기-경계=n
- mabort-on-noreturn -mlong-통화 -mno-long-통화 -msingle-pic-base
-mno-단일-사진-베이스 -mpic-레지스터=등록 번호 -mnop-재미-dllimport -mpoke 함수 이름
-엄지손가락 -마름 -mtpcs-프레임 -mtpcs-리프 프레임 -mcaller-슈퍼 인터워킹
-mcallee-슈퍼 인터워킹 -mtp=name -mtls-방언=방언 -mword-재배치
-mfix-cortex-m3-ldrd -munaligned 액세스 -64비트용 mneon -mslow 플래시 데이터
-masm 구문 통합 -mrestrict-it
AVR 옵션 -mmcu=MCU -maccumulate-args -mbranch 비용=비용 -mcall-프롤로그 -민트8
-mn_플래시=크기 -mno 인터럽트 -mrelax -mmw -mstrict-X -mtiny 스택 -nodevicelib
-Waddr 공간 변환
블랙 핀 옵션 -mcpu =CPU[-후견] -msim -momit-리프 프레임 포인터
-mno-생략-리프-프레임-포인터 -mspecld-이상 -mno-specld-이상 -mcsync-이상
-mno-csync-이상 -mlow-64k -mno-low64k -mstack-check-l1 -중간 공유 라이브러리
-mno-id-공유 라이브러리 -mshared-라이브러리-id=n -mleaf-id-공유 라이브러리
-mno-leaf-id-공유 라이브러리 -msep-데이터 -mno-XNUMX월-데이터 -mlong-통화 -mno-long-통화
-mfast-fp -minline-plt -m멀티코어 -엠코리아 -mcoreb -msdram -micplb
C6X 옵션 -mbig-엔디안 -미리틀 엔디안 -행진=CPU -msim -ms데이터=데이터 유형
CRIS 옵션 -mcpu =CPU -행진=CPU -mtune=CPU -mmax-스택 프레임=n
-melinux-스택크기=n -메트렉스4 -메트렉스100 -mp디버그 -mcc-초기화 -mno 부작용
-mstack 정렬 -mdata 정렬 -mconst-정렬 -m32비트 -m16비트 -m8비트
-mno-프롤로그-에필로그 -mno-gotplt -멜프 -마우트 -미리눅스 -mlinux -심 -sim2
-mmul-bug-해결 방법 -mno-mul-bug-해결 방법
CR16 옵션 -mmac -mcr16cplus -mcr16c -msim -민트32 -mbit-ops -mdata-모델=모델
다윈 옵션 -all_load -allowable_client -아치 -arch_errors_fatal -arch_only
-bind_at_load -묶음 -bundle_loader -고객 이름 -호환성_버전
-현재_버전 -dead_strip -종속성 파일 -dylib_file -dylinker_install_name
-동적 -다이내믹 라이브러리 -내보낸_기호_목록 -파일 목록 -플랫_네임스페이스
-force_cpusubtype_ALL -force_plat_namespace -headerpad_max_install_names -iframework
-이미지_베이스 -초기화 -설치 이름 -keep_private_externs -다중 모듈
-곱하기_정의 -multiply_defined_unused -noall_load
-no_dead_strip_inits_and_terms -nofix 사전 바인딩 -nomultidefs -노프리바인드
-noseglinkit -pagezero_size -사전 바인딩 -prebind_all_twolevel_modules -private_bundle
-read_only_relocs -분할 정렬 -섹트객체 기호 -왜 로드 -세그1주소 -섹션 생성
-섹트객체 기호 - 부문별 -segaddr -segs_read_only_addr -segs_read_write_addr
-세그_주소_테이블 -seg_addr_table_filename -세그링크드잇 -세그프로트 -segs_read_only_addr
-segs_read_write_addr -단일_모듈 -공전 -하위_라이브러리 -sub_umbrella
-twolevel_namespace -우산 -찾으시는 주소가 없습니다 -내보내지 않은_기호_목록
-weak_reference_mismatches -무엇을 로드 -F -거스 -gfull -mmacosx-버전-최소=버전
-mkernel -mon-byte-bool
12월 알파 옵션 -mno-fp-regs -msoft-float -이따 - 부정확한
-mieee-준수 -mfp-트랩 모드=모드 -mfp-반올림 모드=모드 -mtrap-정밀도=모드
-mbuild-상수 -mcpu =CPU 유형 -mtune=CPU 유형 -mbwx -mmax -mfix -mcix
-mfloat-vax -mfloat-ieee -mexplicit-relocs -msmall-데이터 -mlarge-데이터 -m작은 텍스트
-mlarge-텍스트 -메모리 대기 시간=시간
FR30 옵션 -m작은 모델 -mno-lsim
FRV 옵션 -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 -mhard-float -msoft-float
-malloc-cc -mfixed-cc -mdword -mno-dword -m더블 -mno-더블 -미디어 -mno-미디어
-mmuladd -mno-물라드 -mfdpic -minline-plt -mgprel-로 -multilib-라이브러리-pic
-Mlinked-FP -mlong-통화 -악성 레이블 - 라이브러리 사진 -맥-4 -맥-8 -mpack
-mno-팩 -mno 플래그 -mcond-이동 -mno-cond-이동 -moptimize-멤바
-mno-optimize-멤바 -mscc -mno-scc -mcond-exec -mno-조건-exec -mvliw-분기
-mno-vliw-분기 -m다중 조건 실행 -mno-다중 조건-exec -mnested-cond-exec
-mno-중첩-조건-exec -mtomcat-통계 -mTLS -mtls -mcpu =CPU
GNU / 리눅스 옵션 -mglibc -뮤클립 -엠비오닉 -맨드로이드 -tno-안드로이드-cc -tno-안드로이드-ld
H8 / 300 옵션 -mrelax -mh -ms -mn -멕스 -mno-exr -민트32 -악성-300
HPPA 옵션 -행진=건축형 -mdisable-fpregs -mdisable-인덱싱
-mfast-간접 호출 - 가스 -mgnu-ld -mhp-ld -m고정 범위=레지스터 범위
-m점프-인-지연 -mlinker-opt -mlong-통화 -mlong-로드-스토어 -mno-disable-fpregs
-mno-disable-인덱싱 -mno-빠른 간접 호출 -mno-가스 -mno-점프-인-지연
-mno-long-load-store -mno-휴대용-런타임 -mno-소프트-플로트 -mno-공간-regs
-msoft-float -mpa-risc-1-0 -mpa-risc-1-1 -mpa-risc-2-0 -가동 가능한 런타임
-ms스케줄=CPU 유형 -mspace-regs -msio -mwsio -뮤닉스=유닉스 표준 -nolibdld -공전
- 스레드
IA-64 옵션 -mbig-엔디안 -미리틀 엔디안 -mgnu-as -mgnu-ld -mno-그림
-mvolatile-asm-중지 -m 레지스터 이름 -msdata -mno-sdata -m상수-gp -자동 사진
-머퓨즈드-매드 -minline-float-divide-min-latency -minline-float-divide-max-처리량
-mno-inline-float-divide -minline-int-divide-min-latency
-minline-int-divide-max-처리량 -mno-인라인-int-나누기 -minline-sqrt-최소 대기 시간
-minline-sqrt-max-처리량 -mno-인라인-sqrt -mdwarf2-asm -거의 스톱 비트
-m고정 범위=레지스터 범위 -mtls-크기=tls 크기 -mtune=CPU 유형 -milp32. -mlp64
-msched-br-데이터-사양 -msched-ar-데이터-사양 -msched-제어-사양 -msched-br-in-data-spec
-msched-ar-in-data-spec -msched-in-control-spec -msched-spec-ldc
-msched-spec-control-ldc -msched-prefer-비-데이터-사양-insns
-msched-prefer-non-control-spec-insns -매 주기 후 msched-stop-bits
-msched-count-spec-in-중요-경로 -msel-sched-dont-check-control-spec
-msched-fp-mem-deps-제로 비용 -msched-최대-메모리-insns-하드 제한
-msched-최대-메모리-insns=최대-인스
LM32 옵션 -mbarrel-shift 사용 가능 -mdivide 사용 -m곱하기 가능
-msign 확장 가능 -muser 사용 가능
M32R/D 옵션 -m32r2 -m32rx -m32r -m디버그 -악성 루프 -mno-align 루프
-오류율=번호 -mbranch 비용=번호 -모델=코드 크기 모델 유형 -ms데이터=사다
유형 -mno-플러시-펑크 -mflush-func=name -mno-플러시-트랩 -mflush-트랩=번호 -G NUM
M32C 옵션 -mcpu =CPU -msim -memregs=번호
M680x0 옵션 -행진=아치 -mcpu =CPU -mtune=곡조 -m68000 -m68020 -m68020-40
-m68020-60 -m68030 -m68040 -m68060 -mcpu32 -m5200 -m5206e -m528x -m5307 -m5407
-mcfv4e -mbit필드 -mno 비트 필드 -mc68000 -mc68020 -mnobit필드 -mrtd -mno-rtd
-mdiv -mno-div -m짧은 -mno-짧은 -mhard-float -m68881 -msoft-float -mprel
-악성-int -mstrict-정렬 -msep-데이터 -mno-XNUMX월-데이터 -mshared-library-id=n
-중간 공유 라이브러리 -mno-id-공유 라이브러리 -mxgot -mno-xgot
엠코어 옵션 -mhardlit -mno-hardlit -mdiv -mno-div -mrelax-즉시
-mno-relax-immediate -mwide-비트 필드 -mno 와이드 비트 필드 -m4byte-함수
-mno-4byte-함수 -mcallgraph-데이터 -mno-callgraph-데이터 -mslow-바이트
-mno-느린 바이트 -mno-lsim -미리틀 엔디안 -mbig-엔디안 -m210 -m340
-mstack 증가
MeP 옵션 -맙스디프 -몰 옵션 -평균 -m 기반=n -엠비탑스 -MC=n -mclip
-mconfig=name -엠캅 -mcop32 -mcop64 -mivc2 -MDC -mdiv -메브 -멜 -mio-휘발성 -ml
-mleadz -mm -mminmax -멀티 -mno 옵션 -mrepeat -ms -msatur -msdram -msim -msimnovec
-MTF -최소 =n
마이크로블레이즈 옵션 -msoft-float -mhard-float -m작은 나누기 -mcpu =CPU -mmemcpy
-mxl-소프트-뮬 -mxl-소프트-div -mxl-배럴 시프트 -mxl-패턴-비교 -mxl-스택 검사
-mxl-gp-opt -mno-clearbss -mxl-곱하기-높음 -mxl-플로트 변환 -mxl-플로트-sqrt
-mbig-엔디안 -미리틀 엔디안 -mxl-재주문 -mxl-모드-앱 모델
MIPS 옵션 -엘자 -EB -행진=아치 -mtune=아치 -밉스1 -밉스2 -밉스3 -밉스4
-밉스32 -mips32r2 -mips32r3 -mips32r5 -mips32r6 -밉스64 -mips64r2 -mips64r3
-mips64r5 -mips64r6 -밉스16 -mno-mips16 -mflip-mips16 -minterlink 압축
-mno-interlink-압축 -minterlink-mips16 -mno-interlink-mips16 -마비=ABI
-마비콜 -mno-abicals -m공유 -mno 공유 -MPLT -mno-plt -mxgot -mno-xgot
-mgp32 -mgp64 -mfp32 -mfpxx -mfp64 -mhard-float -msoft-float -mno-float
-msingle-float -m더블 플로트 -modd-spreg -mno-홀수-spreg -맙스=모드 -므난=부호화
-mdsp -mno-dsp -MDSPR2 -mno-dspr2 -mmcu -mmno-mcu -메바 -mno-에바 -mvirt -mno-virt
-mxpa -mno-xpa -mmmicromips -mno-micromip -mfpu=fpu 유형 -msmartmips -mno-smartmips
-mpaired-단일 -mno 쌍 단일 -mdmx -mno-mdmx -mips3d -mno-mips3d -mmt
-mno-mt -mllsc -mno-llsc -mlong64 -mlong32 -msym32 -mno-sym32 -GNUM
-mlocal-sdata -mno-로컬-sdata -mextern-sdata -mno-외부-sdata -mgpopt -mno-gopt
-포함된 데이터 -mno-embedded-데이터 -muninit-const-in-rodata
-mno-unit-const-in-rodata -mcode 판독 가능=설정 -msplit 주소
-mno-분할 주소 -mexplicit-relocs -mno-명시적-relocs -mcheck-XNUMX 나눗셈
-mno-check-zero-division -mdivide-트랩 -mdivide-break -mmemcpy -mno-memcpy
-mlong-통화 -mno-long-통화 -mmad -mno-mad -마마드 -mno-imadd -머퓨즈드-매드
-mno-융합-매드 -nocpp -mfix-24k -mno-fix-24k -mfix-r4000 -mno-fix-r4000
-mfix-r4400 -mno-fix-r4400 -mfix-r10000 -mno-fix-r10000 -mfix-rm7000 -mno-fix-rm7000
-mfix-vr4120 -mno-fix-vr4120 -mfix-vr4130 -mno-fix-vr4130 -mfix-sb1 -mno-fix-sb1
-mflush-func=펑크 -mno-플러시-펑크 -mbranch 비용=NUM -mbranch 가능성이 있는
-mno-branch-like -mfp-예외 -mno-fp-예외 -mvr4130-정렬 -mno-vr4130-정렬
-msynci -mno-synci -mrelax-픽-콜 -mno-relax-pic-calls -mmcount-ra-주소
엠믹스 옵션 -mlibfuncs -mno-libfuncs -멤실론 -mno-엡실론 -마비=누
-마비=mmixware -mzero 확장 -mknuthdiv -mtoplevel-심볼 -멜프 -mbranch 예측
-mno-분기-예측 -mbase 주소 -mno-base-주소 -ms단일 종료
-mno-단일 종료
MN10300 옵션 - 복합 버그 -mno-multi-bug -mno-am33 -mam33 -mam33-2 -mam34 -mtune=CPU-
유형 -mreturn-포인터-on-d0 -mno-crt0 -mrelax -밀리 -msetlb
용감 옵션 -메브 -멜 -mmul.x -mno-crt0
MSP430 옵션 -msim -masm-hex -mmcu= -mcpu = -대형 -m작은 -mrelax -mhwmult= -민트
NDS32 옵션 -mbig-엔디안 -미리틀 엔디안 -mreduced-regs -mfull-regs -mcmov -mno-cmov
-mperf-ext -mno-perf-ext -mv3push -mno-v3push -m16비트 -mno-16비트 -misr-벡터-크기=NUM
-mcache-블록 크기=NUM -행진=아치 -mc모델=코드 모델 -mctor-dtor -mrelax
니오스 II 옵션 -G NUM -mgpopt=option -mgpopt -mno-gpopt -멜 -메브 -mno 우회 캐시
-mbypass-캐시 -mno-캐시-휘발성 -mcache-휘발성 -mno-빠른-sw-div -mfast-sw-div
-mhw-물 -mno-hw-물 -mhw-mux -mno-hw-mux -mno-hw-div -mhw-div -엠커스텀-여관=N
-mno-커스텀-여관 -mcustom-fpu-cfg=name -말 -msmallc -msys-crt0=name -msys-lib=name
엔비디아 PTX 옵션 -m32 -m64 -mmainkernel
PDP-11 옵션 -mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45 -m10 -mbcopy
-mbcopy 내장 -민트32 -mno-int16 -민트16 -mno-int32 -mfloat32 -mno-float64
-mfloat64 -mno-float32 -맛시 -mno-abshi -mbranch-비싼 -mbranch-저렴한
-munix-asm -mdec-asm
피코칩 옵션 -매=ae_type -mvliw-예측=N -msymbol-주소
-mno-inefficiency-warnings
PowerPC 옵션 RS/6000 및 PowerPC 옵션을 참조하십시오.
RL78 옵션 -msim -mmul=없음 -mmul=g13 -mmul=rl78 -m64bit-더블 -m32bit-더블
RS/6000 and PowerPC 옵션 -mcpu =CPU 유형 -mtune=CPU 유형 -mc모델=코드 모델
-mpowerpc64 -말티벡 -mno-altivec -mpowerpc-gpopt -mno-powerpc-gpopt
-mpowerpc-gfxopt -mno-powerpc-gfxopt -mmfcrf -mno-mfcrf -mpopcntb -mno-popcntb
-mpopcntd -mno-popcntd -mfprnd -mno-fprnd -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr
-mhard-dfp -mno-하드-dfp -mfull-toc -최소-toc -mno-fp-in-toc -mno-합계-목차
-m64 -m32 -mxl-호환 -mno-xl-컴패트 -mp -악의력 -악성 - 자연
-msoft-float -mhard-float -m다중 -mno-다중 -msingle-float -m더블 플로트
-ms단순-fpu -mstring -mno-문자열 -업데이트 -mno-업데이트 -mavoid-색인 주소
-mno-avoid-색인 주소 -머퓨즈드-매드 -mno-융합-매드 -mbit 정렬
-mno 비트 정렬 -mstrict-정렬 -mno-엄격한 정렬 -m 재배치 가능 -mno 재배치 가능
-mrelocateable-lib -mno-relocateable-lib -mtoc -mno-toc -조금 -미리틀 엔디안
-mbig -mbig-엔디안 -mdynamic-no-pic -말티벡 -mswdiv -msingle-pic-base
- 우선 순위 제한 - inns =우선 -msched-비용이 많이 드는-dep=의존 유형
-minsert-sched-nops=계획 -mcall-sysv -mcall-netbsd -maix-구조체-반환
-msvr4-구조체 반환 -마비=아비형 -msecure-plt -mbss-plt
-mblock-이동-인라인-제한=NUM -미젤 -mno-isel -misel=예 -misel=아니요 -mspe -mno-sp
-mspe=예 -mspe=아니요 -짝이 된 -mgen-cell-마이크로코드 -mwarn-cell-마이크로코드 -mvrsave
-mno-vrsave -mmulhw -mno-물흐 -mdlmzb -mno-dlmzb -mfloat-gprs=예 -mfloat-gprs=아니요
-mfloat-gprs=단일 -mfloat-gprs=더블 -m프로토타입 -mno 프로토타입 -msim -mmvme
- 미친 -골수칼 -멤버 -msdata -ms데이터=고르다 -mvxworks -G NUM -pthread -mrecip
-mrecip=고르다 -mno-recipe -mrecip-정밀도 -mno-precision. -mveclibabi=유형 -mfriz
-mno-friz -중첩 함수에 대한 mpointers -중첩 함수에 대한 mno 포인터
-msave-toc-간접 -mno-save-toc-간접 -mpower8-퓨전 -mno-mpower8-퓨전
-mpower8-벡터 -mno-power8-벡터 -mcrypto -mno-암호화 -mdirect-이동 -mno-직접 이동
-mquad-메모리 -mno 쿼드 메모리 -mquad-메모리-원자 -mno-쿼드-메모리-원자
-mcompat-정렬-parm -mno-compat-align-parm -mupper-regs-df -mno-upper-regs-df
-mupper-regs-sf -mno-upper-regs-sf -mupper-regs -mno-상위-regs
RX 옵션 -m64bit-더블 -m32bit-더블 -fpu -노푸 -mcpu = -mbig-endian-데이터
-mlittle-endian-데이터 -msmall-데이터 -msim -mno-sim -mas100-구문 -mno-as100-구문
-mrelax -mmax-일정 크기= -민트 레지스터= -mpid -mno-warn-다중 고속-인터럽트
-msave-ACC -에 - 인터럽트
S / 390 and z 시리즈 옵션 -mtune=CPU 유형 -행진=CPU 유형 -mhard-float -msoft-float
-mhard-dfp -mno-하드-dfp -mlong-더블-64 -mlong-더블-128 -mbackchain
-mno-백체인 -mpacked-스택 -mno-packed-스택 -msmall-exec -mno-소형-exec
-mmvcle -mno-mvcle -m64 -m31 -m디버그 -mno 디버그 -메사 -mzarch -mtpf 추적
-mno-tpf-추적 -머퓨즈드-매드 -mno-융합-매드 -mwarn-프레임 크기 -mwarn-동적 스택
-mstack 크기 -mstack-가드 -mhotpatch=하프워드,하프워드
점수 옵션 -메브 -멜 -mnhwloop -물 -mmac -mscore5 -mscore5u -mscore7 -mscore7d
SH 옵션 -m1 -m2 -m2e -m2a-노푸 -m2a-단일 전용 -m2a-단일 -m2a -m3 -m3e
-m4-노푸 -m4-단일 전용 -m4-단일 -m4 -m4a-노푸 -m4a-단일 전용 -m4a-단일
-m4a -m4al -m5-64미디어 -m5-64미디어-노푸 -m5-32미디어 -m5-32미디어-노푸 -m5-컴팩트
-m5-컴팩트-nofpu -mb -ml -mdalign -mrelax -mbigtable -mfmovd -미타치 -므레네사스
-mno-르네사스 -mnomac저장 -이따 -mno-ieee -엠비탑스 -사이즈를 잘못 맞추다 -minline-ic_invalidate
-mpadstruct -mspace -mpfergot -muser 모드 -다중 비용=번호 -mdiv=전략
-mdivsi3_libfunc=name -m고정 범위=레지스터 범위 -mindexed 주소 지정
-mgettr비용=번호 -mpt 고정 -maccumulate-outgoing-args -최소 유효 기호
-원자 모델=원자 모델 -mbranch 비용=NUM -mzdc분기 -mno-zdc브랜치
-mcbranch-force-delay-slot -머퓨즈드-매드 -mno-융합-매드 -mfsca -mno-fsca -mfsrra
-mno-fsrra -척-cmove -mtas
솔라리스 2 옵션 -mclear-hwcap -mno-clear-hwcap -불순한 텍스트 -mno-순수 텍스트
-pthread -pthread
SPARC 옵션 -mcpu =CPU 유형 -mtune=CPU 유형 -mc모델=코드 모델 -메모리 모델=메모리
모델 -m32 -m64 -map-regs -mno-app-regs -mfaster-구조체 -mno-빠른 구조
-m플랫 -mno-플랫 -mfpu -mno-fpu -mhard-float -msoft-float -mhard-quad-float
-msoft-쿼드-플로트 -mstack 바이어스 -mno-스택-바이어스 -munaligned-더블
-mno-unaligned-double -muser 모드 -mno-사용자 모드 -mv8plus -mno-v8plus -mvis
-mno-vis -mvis2 -mno-vis2 -mvis3 -mno-vis3 -mcbcond -mno-cbcond -mfmaf -mno-fmaf
-mpoc -mno-popc -mfix-at697f -mfix-ut699
SPU 옵션 -Mwarn-Reloc -mererror-reloc -msafe-dma -munsafe-dma -mbranch 힌트
-msmall-mem -mlarge-mem -mstdmain -m고정 범위=레지스터 범위 -mea32 -mea64
-maddress 공간 변환 -mno 주소 공간 변환 -mcache 크기=캐시 크기
-마토믹 업데이트 -mno-원자 업데이트
V 옵션 -Qy -Qn - 응,경로 -음,DIR
타일-Gx 옵션 -mcpu=CPU -m32 -m64 -mbig-엔디안 -미리틀 엔디안 -mc모델=코드 모델
타일프로 옵션 -mcpu =CPU -m32
V850 옵션 -mlong-통화 -mno-long-통화 -mep -mno-ep -mprolog-함수
-mno-prolog-함수 -mspace -mtda =n -msda=n -mzda=n -map-regs -mno-app-regs
-mdisable-callt -mno-비활성화-콜트 -mv850e2v3 -mv850e2 -mv850e1 -mv850es -mv850e
-mv850 -mv850e3v5 -mloop -mrelax -mlong-점프 -msoft-float -mhard-float -mgcc-아비
-mrh850-아비 -mbig 스위치
백스 옵션 -mg -mgnu -뮤닉스
비전 옵션 -m디버그 -msim -mfpu -mno-fpu -mhard-float -msoft-float -mcpu =CPU 유형
-mtune=CPU 유형 -msv 모드 -muser 모드
VMS 옵션 -mvms-반환 코드 -mdebug-메인=접두사 -mmalloc64 -mpointer-크기=크기
VxWorks 옵션 -mrtp -비정적 -비정적 -비다이나믹 -Xbind-게으른 -X바인드-지금
x86 옵션 -mtune=CPU 유형 -행진=CPU 유형 -mtune-ctrl=기능 목록
-mdump-조정 기능 -mno-기본값 -mfpmath=단위 -매즘=방언 -mno-팬시-수학-387
-mno-fp-ret-in-387 -msoft-float -mno-와이드-곱하기 -mrtd -악성-더블
-mpreferred-스택-경계=NUM -최소화 스택 경계=NUM -mcld -mcx16 -msahf
-mmovbe -mcrc32 -mrecip -mrecip=고르다 -mvzeroupper -mprefer-avx128 -mmmx. -msse -msse2.
-msse3. -mssse3 -msse4.1. -msse4.2. -msse4. -mavx -mavx2 -mavx512f -mavx512pf -mavx512er
-mavx512cd -msha -메스 -mpclmul -mfsgsbase -mrdrnd -mf16c. -mfma -mprefetchwt1
-mclflushopt -mxsavec -mxsave -msse4a -m3dnow -mpopcnt -맘마 -mbmi -mtbm -mfma4 -mxop
-mlzcnt -mbmi2 -mfxsr -mx저장 -mxsaveopt -mrtm -mlwp -mmpx -mmwaitx -m스레드
-mno-align-stringops -minline-all-stringops -minline-stringops-동적으로
-mstringop-전략=ALG -mmemcpy-전략=전략 -mmemset-전략=전략
-mpush-인수 -maccumulate-outgoing-args -m128bit-롱-더블 -m96bit-롱-더블
-mlong-더블-64 -mlong-더블-80 -mlong-더블-128 -mregparm=NUM -msseregparm
-mveclibabi=유형 -mvect8-ret-in-mem -mpc32 -mpc64 -mpc80 -mstack재정렬
-momit-리프 프레임 포인터 -mno-레드-존 -mno-tls-direct-seg-refs -mc모델=코드 모델
-마비=name -maddress 모드=모드 -m32 -m64 -mx32 -m16 -mlarge-데이터-임계값=NUM
-msse2avx -엠펜트리 -mrecord-mcount -mnop-mcount -m8bit-idiv
-mavx256-분할-정렬되지 않은-로드 -mavx256-분할-정렬되지 않은-저장 -악성 데이터=유형
-mstack-보호자-가드=가드
x86 Windows 옵션 -mconsole -mcygwin -mno-cygwin -mdll -mnop-재미-dllimport --mthread.
-뮤니코드 -mwin32 -mwindows -fno-set-stack-실행 가능
Xstormy16 옵션 -msim
엑스텐사 옵션 -mconst16 -mno-const16 -머퓨즈드-매드 -mno-융합-매드 -mforce-no-pic
- 직렬화 - 휘발성 -mno 직렬화 휘발성 -mtext-섹션-리터럴
-mno-텍스트-섹션-리터럴 -mtarget-정렬 -mno-타겟-정렬 -긴 통화
-mno-longcalls
z 시리즈 옵션 S/390 및 zSeries 옵션을 참조하십시오.
암호 세대 옵션
-fcall 저장-등록 번호 -fcall 사용-등록 번호 -고정-등록 번호 -예외 -fnon-call-exception
-fdelete-dead-예외 -펀윈드 테이블 -fasynchronous-unwind-tables -fno-gnu-고유
-finhibit-size-지시어 - 기구 기능
-finstrument-기능-제외-기능-목록=SYM,SYM, ...
-finstrument-기능-제외-파일-목록=파일,파일, ... -fno-공통 -fno-ident
-fpcc-구조체-반환 -fpic -fPIC -파이 -fPIE -fno-점프 테이블 -frecord-gcc-스위치
-freg-구조체-반환 -fshort 열거형 -fshort-더블 -fshort-wchar -fverbose-asm
-fpack-구조체[=n] -fstack-체크 -fstack 제한 레지스터=등록 번호 -fstack-제한-심볼=SYM
-fno-스택 제한 -fsplit 스택 - 밑줄을 긋다 -ftls-모델=모델
-fstack-재사용=재사용 수준 -ftrapv. -fwrapv -fbounds-체크
-가시성=[디폴트 값|내부의|숨겨진|보호] -fstrict-휘발성 비트 필드
-fsync-libcalls
옵션 제어 전에, 종류 of 산출
컴파일에는 사전 처리, 적절한 컴파일, 어셈블리 및
항상 그 순서대로 연결합니다. GCC는 여러 가지를 사전 처리하고 컴파일할 수 있습니다.
여러 어셈블러 입력 파일 또는 하나의 어셈블러 입력 파일로 파일; 그 다음에
각 어셈블러 입력 파일은 개체 파일을 생성하고 링크는 모든 개체를 결합합니다.
파일(새로 컴파일된 파일 및 입력으로 지정된 파일)을 실행 파일로 변환합니다.
주어진 입력 파일에 대해 파일 이름 접미사는 컴파일의 종류를 결정합니다.
끝난:
파일.c
전처리해야 하는 C 소스 코드.
파일.i
전처리하면 안되는 C 소스 코드.
파일.ii
전처리하면 안되는 C++ 소스 코드.
파일.m
오브젝티브-C 소스 코드. 와 연결해야 합니다. libobjc 만드는 도서관
오브젝티브-C 프로그램 작업.
파일.미
전처리해서는 안되는 Objective-C 소스 코드.
파일.mm
파일.M
Objective-C++ 소스 코드. 와 연결해야 합니다. libobjc 만드는 라이브러리
Objective-C++ 프로그램이 작동합니다. 참고 .M 문자 그대로 대문자 M을 나타냅니다.
파일.mii
전처리해서는 안되는 Objective-C++ 소스 코드.
파일.h
C, C++, Objective-C 또는 Objective-C++ 헤더 파일을 미리 컴파일된 파일로 변환
헤더(기본값) 또는 C, C++ 헤더 파일을 Ada 사양으로 변환합니다(
-fdump-ada-spec 스위치).
파일.CC
파일.cp
파일.cxx
파일.cpp
파일.CPP
파일.C++
파일.C
전처리해야 하는 C++ 소스 코드. 참고로 .cxx, 마지막 두 글자
둘 다 말 그대로 x. 마찬가지로, .C 문자 그대로 대문자 C를 나타냅니다.
파일.mm
파일.M
전처리해야 하는 Objective-C++ 소스 코드입니다.
파일.mii
전처리해서는 안되는 Objective-C++ 소스 코드.
파일.hh
파일.H
파일.hp
파일.hxx
파일.hpp
파일.HPP
파일.h++
파일.tcc
C++ 헤더 파일을 미리 컴파일된 헤더 또는 Ada 사양으로 변환합니다.
파일.f
파일.을위한
파일.ftn
사전 처리되지 않아야 하는 고정된 형식의 Fortran 소스 코드입니다.
파일.F
파일.을위한
파일.fpp
파일.FPP
파일.FTN
전처리해야 하는 고정 형식 Fortran 소스 코드(기존
전처리기).
파일.f90
파일.f95
파일.f03
파일.f08
사전 처리되지 않아야 하는 자유 형식 Fortran 소스 코드입니다.
파일.F90
파일.F95
파일.F03
파일.F08
사전 처리해야 하는 자유 형식 Fortran 소스 코드(기존
전처리기).
파일.가다
소스 코드로 이동합니다.
파일.ads
라이브러리 단위 선언(a의 선언)을 포함하는 Ada 소스 코드 파일
패키지, 하위 프로그램 또는 일반 또는 일반 인스턴스화) 또는 라이브러리 단위
이름 바꾸기 선언(패키지, 일반 또는 하위 프로그램 이름 바꾸기 선언). 그런
파일이라고도 함 명세서.
파일.adb
라이브러리 단위 본문(서브 프로그램 또는 패키지 본문)을 포함하는 Ada 소스 코드 파일.
이러한 파일은 기관.
파일.s
어셈블러 코드.
파일.S
파일.sx
전처리해야 하는 어셈블러 코드입니다.
other
링크에 직접 공급할 개체 파일입니다. 인식되지 않는 모든 파일 이름
접미사는 이런 식으로 처리됩니다.
다음을 사용하여 입력 언어를 명시적으로 지정할 수 있습니다. -x 옵션 :
-x 언어
명시적으로 지정 언어 다음 입력 파일에 대해 (대신
컴파일러는 파일 이름 접미사를 기반으로 기본값을 선택합니다. 이 옵션은 모든
다음 입력 파일까지 -x 옵션. 가능한 값 언어 위치 :
c c-헤더 cpp-출력
C++ C++-헤더 C++-cpp-출력
목적-c 목적-c-헤더 목적-c-cpp-출력
목적-c++ 목적-c++-헤더 목적-c++-cpp-출력
어셈블러 어셈블러-with-cpp
ADA
f77 f77-cpp-입력 f95 f95-cpp-입력
go
자바
-x 없음
후속 파일이 처리되도록 언어의 모든 사양을 끕니다.
파일 이름 접미사에 따라 -x 전혀 사용되지 않았습니다).
-통과 종료 코드
일반적으로 GCC 컴파일러의 단계가 반환되면 프로그램이 1의 코드로 종료됩니다.
성공하지 못한 반환 코드. 지정하는 경우 -통과 종료 코드Walk Through California 프로그램, GCC 대신 프로그램
오류를 반환하는 단계에서 생성된 수치상 가장 높은 오류로 반환
표시. 내부 컴파일러 오류가 발생하면 C, C++ 및 Fortran 프런트 엔드에서 4를 반환합니다.
만난다.
컴파일 단계 중 일부만 원하는 경우 다음을 사용할 수 있습니다. -x (또는 파일 이름 접미사)
말하다 GCC 시작 위치 및 옵션 중 하나 -c, -S및 -E 어디를 말하다 GCC 하는 것입니다
멈추다. 일부 조합(예: -x cpp 출력 -E) 지시하다 GCC 할
전혀.
-c 소스 파일을 컴파일하거나 어셈블하되 링크하지 마십시오. 연결 단계는 단순히
완료되지 않았습니다. 최종 출력은 각 소스 파일에 대한 목적 파일 형식입니다.
기본적으로 소스 파일의 개체 파일 이름은 접미사를 대체하여 만들어집니다. .c,
.i, .s, 등 .o.
컴파일이나 어셈블리가 필요하지 않은 인식되지 않는 입력 파일은 무시됩니다.
-S 적절한 컴파일 단계 후에 중지하십시오. 조립하지 마십시오. 출력은
지정된 각 비 어셈블러 입력 파일에 대한 어셈블러 코드 파일 형식입니다.
기본적으로 소스 파일의 어셈블러 파일 이름은 접미사를 대체하여 만들어집니다.
.c, .i, 등 .s.
컴파일이 필요하지 않은 입력 파일은 무시됩니다.
-E 전처리 단계 후에 중지하십시오. 컴파일러를 적절하게 실행하지 마십시오. 출력은
표준 출력으로 전송되는 사전 처리된 소스 코드의 형식입니다.
전처리가 필요하지 않은 입력 파일은 무시됩니다.
-o 파일
파일에 출력 배치 파일. 이것은 어떤 종류의 출력이 생성되든 적용됩니다.
실행 파일, 개체 파일, 어셈블러 파일 또는 전처리된 C
암호.
If -o 지정되지 않은 경우 기본값은 실행 파일을 저장하는 것입니다. 아웃, 그 물체
~을위한 파일 소스.접미사 in 소스.오, 해당 어셈블러 파일 소스, 미리 컴파일된
헤더 파일 소스.접미사.gch, 그리고 표준 출력의 모든 전처리된 C 소스.
-v 다음 단계를 실행하기 위해 실행된 명령을 인쇄합니다(표준 오류 출력에서).
편집. 또한 컴파일러 드라이버 프로그램의 버전 번호와
전처리기와 컴파일러가 적절합니다.
-###
처럼 -v 명령이 실행되지 않고 인수가 인용되지 않는 한
영숫자 또는 "./-_"만 포함합니다. 이것은 쉘 스크립트가 다음을 수행하는 데 유용합니다.
드라이버 생성 명령줄을 캡처합니다.
-파이프
다양한 단계의 통신을 위해 임시 파일 대신 파이프를 사용합니다.
편집. 이것은 어셈블러가 읽을 수 없는 일부 시스템에서 작동하지 않습니다.
파이프에서; 그러나 GNU 어셈블러에는 문제가 없습니다.
--도움
다음에서 이해하는 명령줄 옵션에 대한 설명을 표준 출력에 인쇄합니다.
GCC. 경우 -v 옵션도 지정됩니다. --도움 또한 다양한 사람들에게 전달됩니다.
에 의해 호출된 프로세스 GCC, 명령줄 옵션을 표시할 수 있도록
동의하기. 만약 -웩스트라 옵션도 지정되었습니다(이전에 --도움 옵션),
관련 문서가 없는 명령줄 옵션도
표시됩니다.
-타겟 홀프
대상별 명령줄 옵션에 대한 설명 인쇄(표준 출력에서)
각 도구에 대해. 일부 대상의 경우 추가 대상별 정보도 있을 수 있습니다.
인쇄.
--도움={수업|[^]자격}[, ...]
다음에서 이해하는 명령줄 옵션에 대한 설명을 표준 출력에 인쇄합니다.
지정된 모든 클래스 및 한정자에 맞는 컴파일러. 이들은
지원되는 클래스:
옵티 마이저
컴파일러에서 지원하는 모든 최적화 옵션을 표시합니다.
경고
컴파일러에서 생성한 경고 메시지를 제어하는 모든 옵션을 표시합니다.
목표
대상별 옵션을 표시합니다. 달리 -타겟 홀프 그러나 옵션, 대상-
링커 및 어셈블러의 특정 옵션은 표시되지 않습니다. 이 때문입니다
해당 도구는 현재 확장된 --도움말= 통사론.
매개 변수
에서 인식한 값을 표시합니다. --매개변수 옵션을 선택합니다.
언어
지원되는 옵션 표시 언어어디로 언어 중 하나의 이름입니다
이 버전의 GCC에서 지원되는 언어.
공통의
모든 언어에 공통적인 옵션을 표시합니다.
지원되는 한정자는 다음과 같습니다.
서류 미비 자
문서화되지 않은 옵션만 표시합니다.
합류 한
동일한 기호 뒤에 나타나는 인수를 사용하는 표시 옵션
다음과 같은 연속적인 텍스트 조각: --help=대상.
별도의
뒤에 오는 별도의 단어로 나타나는 인수를 취하는 표시 옵션
다음과 같은 원래 옵션: -o 결과물 파일.
따라서 예를 들어 에서 지원하는 문서화되지 않은 모든 대상별 스위치를 표시하려면
컴파일러는 다음을 사용합니다.
--help=대상, 문서화되지 않음
한정자의 의미는 접두사를 사용하여 반전될 수 있습니다. ^ 캐릭터, 그래서
모든 이진 경고 옵션을 표시하는 예(즉, 켜져 있거나 꺼져 있는 옵션
그리고 인수를 취하지 않음) 설명이 있는 경우 다음을 사용합니다.
--help=경고,^가입됨,^문서화되지 않음
인수 --도움말= 역 한정자로만 구성되어서는 안 됩니다.
여러 클래스를 결합하는 것이 가능하지만 이는 일반적으로 출력을 제한하므로
표시할 것이 없을 정도로. 그러나 작동하는 한 가지 경우는 다음과 같습니다.
수업 중 하나는 목표. 예를 들어 모든 대상별
최적화 옵션, 사용:
--help=타겟, 옵티마이저
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 --도움말= 옵션은 명령줄에서 반복될 수 있습니다. 각 연속 사용 표시
이미 표시된 옵션은 건너뛰고 요청된 옵션 클래스입니다.
경우 -Q 옵션이 명령줄에 표시되기 전에 --도움말= 옵션을 선택한 다음
에 의해 표시되는 설명 텍스트 --도움말= 변경됩니다. 표시된 것을 설명하는 대신
옵션, 옵션 활성화, 비활성화 또는 설정 여부에 대한 표시가 제공됩니다.
특정 값으로 (컴파일러가 이것을 알고 있다고 가정하면
--도움말= 옵션이 사용됨).
다음은 ARM 포트의 잘린 예입니다. GCC:
% gcc -Q -mabi=2 --help=대상 -c
다음 옵션은 대상에 따라 다릅니다.
-마비= 2
-mabort-on-noreturn [비활성화됨]
-mapcs [비활성화됨]
출력은 이전 명령줄 옵션의 영향에 민감하므로
예를 들어 어떤 최적화가 활성화되어 있는지 확인할 수 있습니다. -O2 사용하여:
-Q -O2 --help=최적화기
또는 다음을 통해 활성화된 바이너리 최적화를 찾을 수 있습니다. -O3 사용하여:
gcc -c -Q -O3 --help=최적화기 > /tmp/O3-opts
gcc -c -Q -O2 --help=최적화기 > /tmp/O2-opts
diff /tmp/O2-opts /tmp/O3-opts | 그렙 활성화
-표준 접두사 없음
심볼릭 링크를 확장하지 마십시오. 참조를 해결하십시오. /../ or //./, 또는 경로를 만드십시오
상대 접두사를 생성할 때 절대.
--번역
호출된 GCC의 버전 번호와 저작권을 표시합니다.
-싸개
래퍼 프로그램에서 모든 하위 명령을 호출합니다. 래퍼 프로그램의 이름과
매개변수는 쉼표로 구분된 목록으로 전달됩니다.
gcc -c tc -wrapper gdb,--args
이것은 모든 하위 프로그램을 호출합니다. GCC 아래에 gdb --인수, 따라서 호출 cc1 is
gdb --인수 cc1 ....
-f플러그인=name.그래서
파일에 플러그인 코드 로드 name.so, dlopen'd할 공유 객체로 가정
컴파일러. 공유 객체 파일의 기본 이름은 플러그인을 식별하는 데 사용됩니다.
인수 구문 분석을 위해(참조 -fplugin-인수-name-키=가치 아래에). 각
플러그인은 플러그인 API에 지정된 콜백 함수를 정의해야 합니다.
-fplugin-인수-name-키=가치
라는 인수를 정의합니다. 키 가치가있는 가치 라는 플러그인의 경우 name.
-fdump-ada-spec[-날씬한]
C 및 C++ 소스 및 포함 파일의 경우 해당 Ada 사양을 생성합니다.
-fada-사양-부모=단위
함께 -fdump-ada-spec[-날씬한] 위의 Ada 사양을 하위 단위로 생성합니다.
부모의 단위.
-fdump-go-spec=파일
모든 언어의 입력 파일에 대해 해당 Go 선언을 다음에서 생성합니다. 파일. 이
유용한 방법일 수 있는 Go "const", "type", "var" 및 "func" 선언을 생성합니다.
다른 언어로 작성된 코드에 Go 인터페이스를 작성하기 시작합니다.
@파일
다음에서 명령줄 옵션 읽기 파일. 읽은 옵션은 다음 위치에 삽입됩니다.
원래의 @파일 옵션. 만약에 파일 존재하지 않거나 읽을 수 없는 경우 옵션
문자 그대로 처리되며 제거되지 않습니다.
옵션 파일 공백으로 구분됩니다. 공백 문자가 포함될 수 있습니다.
옵션에서 전체 옵션을 작은따옴표나 큰따옴표로 묶습니다. 어느
문자(백슬래시 포함)는
백슬래시와 함께 포함됩니다. NS 파일 자체에 추가 @가 포함될 수 있습니다.파일 옵션; 어느
이러한 옵션은 재귀적으로 처리됩니다.
컴파일 C + + 프로그램
C++ 소스 파일은 일반적으로 접미사 중 하나를 사용합니다. .C, .CC, .cpp, .CPP, .C++, .cp및
.cxx; C++ 헤더 파일은 자주 사용합니다. .hh, .hpp, .H, 또는 (공유 템플릿 코드의 경우) .tcc및
전처리된 C++ 파일은 접미사를 사용합니다. .ii. GCC는 이러한 이름을 가진 파일을 인식하고
컴파일할 때와 같은 방식으로 컴파일러를 호출하더라도 C++ 프로그램으로 컴파일합니다.
C 프로그램(보통 이름 GCC).
그러나 사용 GCC C++ 라이브러리를 추가하지 않습니다. g ++ GCC를 호출하는 프로그램이며
C++ 라이브러리에 대한 링크를 자동으로 지정합니다. 그것은 취급 .c, .h and .i 파일
C 소스 파일 대신 C++ 소스 파일 -x 사용. 이 프로그램도 유용합니다
C 헤더 파일을 미리 컴파일할 때 .h C++ 컴파일에 사용하기 위한 확장입니다. 에
많은 시스템, g ++ 이름과 함께 설치됩니다. C ++.
C++ 프로그램을 컴파일할 때 동일한 명령줄 옵션을 여러 개 지정할 수 있습니다.
모든 언어로 프로그램을 컴파일하는 데 사용합니다. 또는 C에 의미 있는 명령줄 옵션
및 관련 언어; 또는 C++ 프로그램에만 의미가 있는 옵션.
옵션 제어 C 방언
다음 옵션은 C의 방언(또는 C++과 같은 C에서 파생된 언어,
컴파일러가 허용하는 Objective-C 및 Objective-C++):
-안시
C 모드에서는 다음과 같습니다. -표준=c90. C++ 모드에서는 다음과 같습니다.
-std = c ++ 98.
이것은 ISO C90과 호환되지 않는 GCC의 특정 기능을 끕니다.
C 코드 컴파일) 또는 "asm" 및 같은 표준 C++(C++ 코드를 컴파일할 때)
"typeof" 키워드 및 "unix" 및 "vax"와 같은 미리 정의된 매크로
사용 중인 시스템 유형. 또한 바람직하지 않고 거의 사용되지 않는 ISO를 가능하게 합니다.
삼국지 기능. C 컴파일러의 경우 C++ 스타일 인식을 비활성화합니다. //
주석 및 "인라인" 키워드.
대체 키워드 "__asm__", "__extension__", "__inline__" 및 "__typeof__"
에도 불구하고 계속 일하다 -안시. ISO C 프로그램에서 사용하고 싶지 않습니다.
물론 포함할 수 있는 헤더 파일에 넣는 것이 유용합니다.
컴파일 완료 -안시. "__unix__"와 같은 사전 정의된 대체 매크로 및
"__vax__"도 사용 가능 여부에 관계없이 사용할 수 있습니다. -안시.
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 -안시 옵션으로 인해 비 ISO 프로그램이 무료로 거부되지 않습니다. 을위한
즉, -Wpedantic 에 추가로 필요합니다 -안시.
매크로 "__STRICT_ANSI__"는 -안시 옵션이 사용됩니다. 일부 헤더
파일은 이 매크로를 인지하고 특정 기능을 선언하거나 정의하지 않을 수 있습니다.
ISO 표준이 요구하지 않는 특정 매크로; 이것은 방해를 피하기 위한 것입니다
다른 용도로 이러한 이름을 사용할 수 있는 모든 프로그램에서.
일반적으로 내장되어 있지만 ISO C에서 정의한 의미 체계가 없는 기능(예:
"alloca" 및 "ffs")는 다음과 같은 경우 내장 함수가 아닙니다. -안시 사용.
-표준=
언어 표준을 결정합니다. 이 옵션은 현재 다음 경우에만 지원됩니다.
C 또는 C++ 컴파일.
컴파일러는 다음과 같은 몇 가지 기본 표준을 수용할 수 있습니다. c90 or C ++ 98, GNU 방언
다음과 같은 표준의 gnu90 or 누++98. 기본 표준이 지정되면
컴파일러는 해당 표준을 따르는 모든 프로그램과 GNU 확장을 사용하는 프로그램을 허용합니다.
모순되지 않는 것. 예를 들어, -표준=c90 GCC의 특정 기능을 끕니다.
"asm" 및 "typeof" 키워드와 같이 ISO C90과 호환되지 않지만
생략과 같이 ISO C90에서 의미가 없는 기타 GNU 확장
"?:" 표현식의 중간 용어. 반면에 표준의 GNU 방언이
가 지정되면 컴파일러에서 지원하는 모든 기능이 활성화됩니다.
기능은 기본 표준의 의미를 변경합니다. 결과적으로 일부 엄격한 준수
프로그램이 거부될 수 있습니다. 특정 표준은 다음에서 사용됩니다. -Wpedantic 확인하기
어떤 기능이 해당 표준 버전에서 GNU 확장인지 확인합니다. 예를 들어
-std=gnu90 -Wpedantic C++ 스타일에 대한 경고 // 댓글, 동안 -std=gnu99 -Wpedantic
하지 않습니다.
이 옵션에 대한 값을 제공해야 합니다. 가능한 값은
c90
c89
ISO9899:1990
모든 ISO C90 프로그램 지원(ISO C90과 충돌하는 특정 GNU 확장
비활성화됨). 와 동일 -안시 C 코드의 경우.
ISO9899:199409
개정 90에서 수정된 ISO C1.
c99
의 C9x
ISO9899:1999
ISO9899:199x
ISO C99. 이 표준은 실질적으로 완벽하게 지원되며 모듈로 버그 및
부동 소수점 문제(선택적 C99 기능과 주로 관련되지는 않지만
부록 F 및 G). 보다http://gcc.gnu.org/c99status.html> 더
정보. 이름 의 C9x and ISO9899:199x 더 이상 사용되지 않습니다.
c11
의 C1x
ISO9899:2011
ISO C11은 ISO C 표준의 2011년 개정판입니다. 이 표준은 실질적으로
완전히 지원됨, 모듈로 버그, 부동 소수점 문제(주로 완전히는 아니지만
부록 F 및 G) 및 옵션 부록 K의 선택적 C11 기능과 관련
(경계 확인 인터페이스) 및 L (분석 가능성). 이름 의 C1x 더 이상 사용되지 않습니다.
gnu90
gnu89
ISO C90의 GNU 방언(일부 C99 기능 포함).
gnu99
gnu9x
ISO C99의 GNU 방언. 이름 gnu9x 더 이상 사용되지 않습니다.
gnu11
gnu1x
ISO C11의 GNU 방언. 이것은 C 코드의 기본값입니다. 이름 gnu1x is
더 이상 사용되지 않습니다.
C ++ 98
C ++ 03
1998년 ISO C++ 표준과 2003년 기술 정오표 및 일부 추가
결함 보고서. 와 동일 -안시 C++ 코드용.
누++98
누++03
GNU 방언 -std = c ++ 98. 이것은 C++ 코드의 기본값입니다.
C ++ 11
C++0x
2011 ISO C++ 표준 및 수정 사항. 이름 C++0x 더 이상 사용되지 않습니다.
누++11
gnu++0x
GNU 방언 -std = c ++ 11. 이름 gnu++0x 더 이상 사용되지 않습니다.
C ++ 14
C++1y
2014 ISO C++ 표준 및 수정 사항. 이름 C++1y 더 이상 사용되지 않습니다.
누++14
gnu++1년
GNU 방언 -std = c ++ 14. 이름 gnu++1년 더 이상 사용되지 않습니다.
C++1z
2017년에 잠정적으로 계획된 ISO C++ 표준의 다음 개정판. 지원
매우 실험적이며 거의 확실하게 호환되지 않는 방식으로 변경될 것입니다.
향후 릴리스.
gnu++1z
GNU 방언 -std=c++1z. 지원은 매우 실험적이며 거의
향후 릴리스에서는 확실히 호환되지 않는 방식으로 변경됩니다.
-fgnu89-인라인
옵션 -fgnu89-인라인 GCC에 "인라인"에 대해 전통적인 GNU 의미 체계를 사용하도록 지시합니다.
C99 모드에서 작동합니다.
이 옵션을 사용하는 것은 "gnu_inline" 함수 속성을 추가하는 것과 거의 같습니다.
모든 인라인 함수에.
옵션 -fno-gnu89-인라인 명시적으로 GCC에 C99 의미 체계를 사용하도록 지시합니다.
C99 또는 gnu99 모드에 있을 때 "인라인"입니다(즉, 기본 동작을 지정함). 이것
옵션은 에서 지원되지 않습니다 -표준=c90 or -std=gnu90 방법.
전처리기 매크로 "__GNUC_GNU_INLINE__" 및 "__GNUC_STDC_INLINE__"을 사용할 수 있습니다.
"인라인" 기능에 대해 어떤 의미 체계가 적용되는지 확인합니다.
-보조 정보 파일 이름
선언된 모든 함수에 대해 주어진 파일 이름 프로토타입 선언으로 출력 및/또는
헤더 파일을 포함하여 번역 단위에 정의됩니다. 이 옵션은
C 이외의 언어에서는 조용히 무시됩니다.
선언 외에도 파일은 주석에서 각 선언의 출처를 나타냅니다.
(소스 파일 및 라인), 선언이 암시적, 프로토타입 또는
프로토타입되지 않은(I, N 새로운 또는 O old의 경우 각각 다음 첫 번째 문자에서
행 번호 및 콜론), 선언 또는 정의에서 왔는지 여부
(C or F, 각각 다음 문자). 기능의 경우
정의에서 선언이 뒤따르는 K&R 스타일의 인수 목록도
선언 후 주석 내부에 제공됩니다.
- 휴경 매개변수 없는 가변 함수
명명된 매개변수 없이 가변 함수를 허용합니다.
이러한 기능을 정의하는 것은 가능하지만, 이것은 매우 유용하지 않습니다.
인수를 읽을 수 없습니다. 이 구성은 C에 대해서만 지원됩니다.
C++에서 허용합니다.
-fno-asm
코드에서 사용할 수 있도록 "asm", "inline" 또는 "typeof"를 키워드로 인식하지 마십시오.
단어를 식별자로 사용합니다. "__asm__", "__inline__" 및
대신 "__typeof__". -안시 의미하다 -fno-asm.
C++에서 이 스위치는 "typeof" 키워드에만 영향을 줍니다. "asm"과 "inline"은
표준 키워드. 다음을 사용하고 싶을 수도 있습니다. -fno-gnu-키워드 대신 플래그가 있습니다.
같은 효과. C99 모드에서(-표준=c99 or -std=gnu99), 이 스위치는
"inline"은 ISO C99의 표준 키워드이기 때문에 "asm" 및 "typeof" 키워드입니다.
-fno 내장
-fno-내장-기능
로 시작하지 않는 내장 함수를 인식하지 마십시오. __내장_ 접두사로.
GCC는 일반적으로 특정 내장 기능을 더 많이 처리하기 위해 특수 코드를 생성합니다.
효율적으로; 예를 들어, "alloca"에 대한 호출은 단일 명령이 될 수 있습니다.
스택을 직접 조정하고 "memcpy"에 대한 호출이 인라인 복사 루프가 될 수 있습니다. NS
결과 코드는 종종 더 작고 빠르지만 함수가 no를 호출하기 때문에
더 이상 표시되지 않으면 해당 호출에 중단점을 설정할 수 없으며 변경할 수도 없습니다.
다른 라이브러리와 연결하여 함수의 동작. 또한, 언제
함수가 내장 함수로 인식되면 GCC는 이에 대한 정보를 사용할 수 있습니다.
해당 함수에 대한 호출 문제에 대해 경고하거나 더 많은 것을 생성하는 함수
결과 코드에 여전히 해당 함수에 대한 호출이 포함되어 있어도 효율적인 코드입니다. 을위한
예를 들어 경고가 표시됩니다. -W포맷 "printf"가 "printf"일 때 "printf"에 대한 잘못된 호출의 경우
내장되어 있고 "strlen"은 전역 메모리를 수정하지 않는 것으로 알려져 있습니다.
와 더불어 -fno-내장-기능 옵션 내장 기능만 기능 사용할 수 없습니다.
기능 로 시작해서는 안 됩니다. __내장_. 내장되지 않은 함수의 이름이 지정된 경우
이 버전의 GCC에서는 이 옵션이 무시됩니다. 해당하는 내용이 없습니다
-f내장-기능 옵션; 내장 기능을 선택적으로 활성화하려면
사용 -fno 내장 or -프리스탠딩, 다음과 같은 매크로를 정의할 수 있습니다.
#define abs(n) __builtin_abs((n))
#define strcpy(d, s) __builtin_strcpy ((d), (s))
-호스트
컴파일이 호스팅 환경을 대상으로 한다고 주장합니다. 이것은 의미합니다 -f내장. 에이
호스팅된 환경은 전체 표준 라이브러리를 사용할 수 있는 환경입니다.
"main"의 반환 유형은 "int"입니다. 예는 다음을 제외하고 거의 모든 것입니다.
핵심. 이것은 동등하다 -fno 독립형.
-프리스탠딩
컴파일이 독립 환경을 대상으로 한다고 주장합니다. 이것은 의미합니다
-fno 내장. 독립 환경은 표준 라이브러리가 제공하지 않을 수 있는 환경입니다.
존재하며 프로그램 시작이 반드시 "main"에 있지 않을 수 있습니다. 가장 확실한 예
OS 커널입니다. 이것은 동등하다 -fno 호스팅.
-fopenacc
C/C++에서 OpenACC 지시문 "#pragma acc" 및 Fortran에서 "!$acc" 처리를 활성화합니다.
인셀덤 공식 판매점인 -fopenacc 가 지정되면 컴파일러는 다음에 따라 가속 코드를 생성합니다.
OpenACC 응용 프로그래밍 인터페이스 v2.0http://www.openacc.org/>. 이 옵션
의미하다 -pthread, 따라서 다음을 지원하는 대상에서만 지원됩니다.
-pthread.
이것은 실험적인 기능이며 불완전하며 향후 변경될 수 있습니다.
GCC 버전. 보다https://gcc.gnu.org/wiki/OpenACC> 자세한 내용은.
-fopenmp
C/C++에서 OpenMP 지시문 "#pragma omp" 및 Fortran에서 "!$omp" 처리를 활성화합니다.
인셀덤 공식 판매점인 -fopenmp 가 지정되면 컴파일러는 다음에 따라 병렬 코드를 생성합니다.
OpenMP 응용 프로그램 인터페이스 v4.0http://www.openmp.org/>. 이 옵션
의미하다 -pthread, 따라서 다음을 지원하는 대상에서만 지원됩니다.
-pthread. -fopenmp 의미하다 -fopenmp-simd.
-fopenmp-simd
C/C++에서는 "#pragma omp"를 사용하고 C/C++에서는 "!$omp"를 사용하여 OpenMP의 SIMD 지시문 처리를 활성화합니다.
포트란. 다른 OpenMP 지시문은 무시됩니다.
-fclkplus
C/C++용 Cilk Plus 언어 확장 기능 사용을 활성화합니다. 옵션이
-fclkplus 가 지정되면 Cilk Plus Language 확장 기능의 사용을 활성화합니다.
C/C++용. 현재 구현은 ABI 버전 1.2를 따릅니다. 이것은
부분적으로만 완료되고 인터페이스가 변경될 수 있는 실험적 기능
공식 사양이 변경됨에 따라 GCC의 향후 버전에서. 현재 모든
기능이지만 "_Silk_for"가 구현되었습니다.
-fgnu-tm
옵션이 -fgnu-tm 가 지정되면 컴파일러는 Linux용 코드를 생성합니다.
인텔의 현재 트랜잭션 메모리 ABI 사양 문서의 변형(개정
1.1, 6년 2009월 XNUMX일). 인터페이스가 변경될 수 있는 실험적인 기능입니다.
공식 사양이 변경됨에 따라 GCC의 향후 버전. 아니니 참고하세요
이 기능에 대해 모든 아키텍처가 지원됩니다.
GCC의 트랜잭션 메모리 지원에 대한 자세한 내용은
비호출 예외에서는 트랜잭션 메모리 기능이 지원되지 않습니다.
(-fnon-call-exception).
-fms-확장
Microsoft 헤더 파일에 사용되는 일부 비표준 구성을 허용합니다.
C++ 코드에서 이것은 구조의 멤버 이름이 이전 유형과 유사하도록 허용합니다.
선언.
typedef 정수 UOW;
구조체 ABC {
우우우우우우우;
};
구조체와 공용체에서 이름이 없는 필드의 일부 경우는 이 경우에만 허용됩니다.
옵션을 선택합니다.
이 옵션은 ms-abi를 사용하는 x86 대상을 제외한 모든 대상에 대해 꺼져 있습니다.
-fplan9-확장
Plan 9 코드에 사용된 일부 비표준 구성을 수락합니다.
이를 통해 -fms-확장, 익명의 구조체에 대한 포인터 전달을 허용합니다.
필드 유형의 요소에 대한 포인터를 기대하는 함수에 대한 필드, 및
typedef를 사용하여 선언된 익명 필드 참조를 허용합니다. 이것은 단지
C++가 아닌 C에서 지원됩니다.
-삼각형
ISO C trigraph를 지원합니다. NS -안시 옵션(및 -표준 엄격한 ISO C를 위한 옵션
적합성) 의미 -삼각형.
-전통적인
-전통적인 cpp
이전에는 이러한 옵션으로 인해 GCC가 사전 표준 C 컴파일러를 에뮬레이트하려고 했습니다.
이제 만 지원됩니다. -E 스위치. 전처리기는 계속 지원
사전 표준 모드. 자세한 내용은 GNU CPP 설명서를 참조하십시오.
-fcond-불일치
두 번째 및 세 번째 인수에서 유형이 일치하지 않는 조건식을 허용합니다.
그러한 표현식의 값은 무효입니다. 이 옵션은 C++에서 지원되지 않습니다.
-아마 벡터 변환
요소 수가 다른 벡터 간의 암시적 변환 허용 및/또는
호환되지 않는 요소 유형 이 옵션은 새 코드에 사용하면 안 됩니다.
-funsigned-char
"unsigned char"처럼 "char" 유형을 unsigned로 둡니다.
각 종류의 기계에는 "char"가 무엇인지에 대한 기본값이 있습니다. 그것은
기본적으로 "unsigned char" 또는 기본적으로 "signed char"와 같습니다.
이상적으로 이식 가능한 프로그램은 항상 "signed char" 또는 "unsigned char"를 사용해야 합니다.
객체의 부호에 따라 다릅니다. 그러나 많은 프로그램이 사용하도록 작성되었습니다.
일반 "char"에 따라 서명되거나 서명되지 않을 것으로 예상합니다.
그들이 쓰여진 기계. 이 옵션과 그 역을 사용하면 다음과 같이 만들 수 있습니다.
프로그램은 반대 기본값으로 작동합니다.
"char" 유형은 항상 "signed char" 또는 "unsigned" 각각과 구별되는 유형입니다.
char", 그 동작이 항상 그 둘 중 하나와 같더라도.
-fsigned-char
"signed char"와 같이 "char" 유형을 서명하도록 합니다.
이것은 다음과 같습니다. -fno-unsigned-char, 의 부정형이다.
-funsigned-char. 마찬가지로 옵션 -fno-서명-문자 에 해당하는
-funsigned-char.
-fsigned 비트 필드
- funsigned 비트 필드
-fno-signed-bitfields
-fno-부호 없는 비트 필드
이 옵션은 선언 시 비트 필드가 서명되었는지 여부를 제어합니다.
"signed" 또는 "unsigned"를 사용하지 않습니다. 기본적으로 이러한 비트 필드는 서명되어 있습니다.
일관성이 있기 때문입니다. "int"와 같은 기본 정수 유형은 부호 있는 유형입니다.
옵션 제어 C + + 방언
이 섹션에서는 C++ 프로그램에만 의미가 있는 명령줄 옵션에 대해 설명합니다.
프로그램 언어에 관계없이 대부분의 GNU 컴파일러 옵션을 사용할 수도 있습니다.
예를 들어 파일을 컴파일할 수 있습니다. 퍼스트클래스.C 이렇게 :
g++ -g -frepo -O -c firstClass.C
이 예에서는 -프레포 C++ 프로그램 전용 옵션입니다. 당신은 사용할 수 있습니다
GCC에서 지원하는 모든 언어의 기타 옵션.
다음은 다음과 같은 옵션 목록입니다. 만 C++ 프로그램 컴파일:
-fabi 버전=n
버전 사용 n C++ ABI. 기본값은 버전 0입니다.
버전 0은 C++ ABI 사양에 가장 근접한 버전을 나타냅니다.
따라서 버전 0을 사용하여 얻은 ABI는 다른 버전의 G++에서 변경됩니다.
ABI 버그가 수정되었습니다.
버전 1은 G++ 3.2에 처음 등장한 C++ ABI의 버전입니다.
버전 2는 G++ 3.4에 처음 등장한 C++ ABI 버전입니다.
G++ 4.9를 통한 기본값.
버전 3은 상수 주소를 템플릿 인수로 맹글링하는 오류를 수정합니다.
G++ 4에서 처음 등장한 버전 4.5는 벡터에 대한 표준 맹글링을 구현합니다.
유형.
G++ 5에서 처음 등장한 버전 4.6는 속성의 맹글링을 수정합니다.
함수 포인터 유형에 대한 const/volatile, 일반 decl의 decltype 및 사용
다른 매개변수의 선언에서 함수 매개변수.
G++ 6에 처음 등장한 버전 4.7은 C++11의 승격 동작을 수정합니다.
범위가 지정된 열거형 및 템플릿 인수 팩의 맹글링, const/static_cast, 접두사 ++
및 --, 템플릿 인수로 사용되는 클래스 범위 함수.
G++ 7에서 처음 등장한 버전 4.8은 nullptr_t를 내장 유형으로 처리합니다.
기본 인수 범위에서 람다의 맹글링을 수정합니다.
G++ 8에서 처음 등장한 버전 4.9은 다음의 대체 동작을 수정합니다.
function-cv-qualifier가 있는 함수 유형.
참조 -와비.
-fabi 호환 버전=n
강력한 별칭을 지원하는 대상에서 G++는 다음을 생성하여 변경 사항을 수정합니다.
잘못된 기호를 정의할 때 올바른 맹글링된 이름을 가진 별칭
망가진 이름. 이 스위치는 별칭에 사용할 ABI 버전을 지정합니다.
와 -fabi 버전=0 (기본값), 기본값은 2입니다. 다른 ABI 버전이
명시적으로 선택하면 기본값은 0입니다.
호환성 버전도 다음으로 설정됩니다. -와비=n.
-fno-액세스 제어
모든 액세스 확인을 끕니다. 이 스위치는 주로 다음의 버그를 해결하는 데 유용합니다.
액세스 제어 코드.
-fcheck-신규
시도하기 전에 "operator new"가 반환한 포인터가 null이 아닌지 확인하십시오.
할당된 스토리지를 수정합니다. 이 검사는 일반적으로 C++
표준은 "연산자 new"가 "throw()"로 선언된 경우에만 0을 반환하도록 지정합니다.
이 경우 컴파일러는 이 옵션이 없어도 항상 반환 값을 확인합니다. 에
다른 모든 경우, "operator new"에 비어 있지 않은 예외 사양이 있는 경우 메모리
소진은 "std::bad_alloc"을 던져서 알립니다. 또한보십시오 (아무도).
-fconstexpr-깊이=n
C++11 constexpr 함수에 대한 최대 중첩 평가 깊이를 다음으로 설정합니다. n. 한도
상수 표현식 평가 중에 무한 재귀를 감지하는 데 필요합니다. NS
표준에서 지정한 최소값은 512입니다.
-fdeduce-init-list
중괄호에서 "std::initializer_list"로 템플릿 유형 매개변수 추론 활성화
동봉된 초기화 목록, 즉
주형 자동 전달(T t) -> decltype(realfn(t))
{
반환 realfn (t);
}
무효 f()
{
앞으로({1,2}); // 콜포워드 >
}
이 공제는 원래 제안된 것의 가능한 확장으로 구현되었습니다.
C++11 표준에 대한 의미 체계이지만 최종 표준의 일부가 아니므로 다음과 같습니다.
기본적으로 비활성화되어 있습니다. 이 옵션은 더 이상 사용되지 않으며 향후 제거될 수 있습니다.
G++ 버전.
-ffriend 주입
친구 함수를 둘러싸는 네임스페이스에 주입하여 외부에서 볼 수 있도록 합니다.
선언된 클래스의 범위입니다. 친구 기능이 문서화되었습니다.
이전 주석 C++ 참조 설명서에서 이 방법으로 작동합니다. 그러나 ISO C++에서는
둘러싸는 범위에서 선언되지 않은 friend 함수는 다음을 통해서만 찾을 수 있습니다.
인수 종속 조회. GCC는 기본적으로 표준 동작입니다.
이 옵션은 호환성을 위한 것으로 향후 G++ 릴리스에서 제거될 수 있습니다.
-fno-elide-생성자
C++ 표준은 구현이 임시 생성을 생략하도록 허용합니다.
같은 유형의 다른 개체를 초기화하는 데 사용됩니다. 이 옵션을 지정하면
최적화하고 모든 경우에 G++에서 복사 생성자를 호출하도록 합니다.
-fno-enforce-eh-specs
런타임에 예외 사양 위반을 확인하는 코드를 생성하지 마십시오.
이 옵션은 C++ 표준을 위반하지만 코드 크기를 줄이는 데 유용할 수 있습니다.
"NDEBUG"를 정의하는 것과 매우 유사합니다. 이것은 사용자 코드를 제공하지 않습니다
예외 사양을 위반하여 예외를 던질 수 있는 권한 NS
컴파일러는 여전히 사양에 따라 최적화하므로 예기치 않은
예외로 인해 런타임에 정의되지 않은 동작이 발생합니다.
-fextern-tls-초기화
-fno-외부-tls-초기화
C++11 및 OpenMP 표준은 "thread_local" 및 "threadprivate" 변수를 허용합니다.
동적(런타임) 초기화가 있습니다. 이를 지원하기 위해 이러한 변수를 사용하는 경우
필요한 초기화를 수행하는 래퍼 함수를 거칩니다. 때
변수의 사용 및 정의가 동일한 번역 단위에 있으므로 이 오버헤드는
최적화되지 않았지만 다른 번역 단위에서 사용하는 경우
변수에 실제로 동적이 필요하지 않더라도 상당한 오버헤드
초기화. 프로그래머가 변수를 사용하지 않는다는 것을 확신할 수 있다면
TU를 정의하려면 동적 초기화를 트리거해야 합니다(변수가
정적으로 초기화되거나 TU를 정의하는 변수의 사용이 실행됩니다.
다른 TU에서 사용하기 전에 이러한 오버헤드를 피할 수 있습니다.
-fno-외부-tls-초기화 옵션을 선택합니다.
기호 별칭을 지원하는 대상에서 기본값은 -fextern-tls-초기화. 목표에
기호 별칭을 지원하지 않는 경우 기본값은 -fno-외부-tls-초기화.
-ffor 범위
-범위에 대한 fno
If -ffor 범위 가 지정되면 선언된 변수의 범위 for-init-문
C++ 표준에 지정된 대로 "for" 루프 자체로 제한됩니다. 만약에
-범위에 대한 fno 가 지정되면 선언된 변수의 범위 for-init-문
이전 버전의 G++에서와 같이 둘러싸는 범위의 끝까지 확장되며,
C++의 다른 (전통적인) 구현.
두 플래그가 모두 제공되지 않으면 기본값은 표준을 따르지만 허용하고 제공하는 것입니다.
그렇지 않으면 유효하지 않거나 다른 코드를 가질 수 있는 구식 코드에 대한 경고
행동.
-fno-gnu-키워드
코드에서 이 단어를 키워드로 사용할 수 있도록 "typeof"를 키워드로 인식하지 마십시오.
식별자. 대신 "__typeof__" 키워드를 사용할 수 있습니다. -안시 의미하다
-fno-gnu-키워드.
-fno-암시적 템플릿
암시적으로(즉,
사용하다); 명시적 인스턴스화에 대해서만 코드를 내보냅니다.
-fno-implicit-inline-템플릿
인라인 템플릿의 암시적 인스턴스화를 위한 코드도 내보내지 마십시오. 기본값
최적화가 필요한지 여부에 관계없이 컴파일되도록 인라인을 다르게 처리하는 것입니다.
동일한 명시적 인스턴스화 세트.
-fno-구현-인라인
공간을 절약하려면 에 의해 제어되는 인라인 함수의 외부 복사본을 내보내지 마십시오.
"#pragma 구현". 이러한 기능이 없으면 링커 오류가 발생합니다.
호출되는 모든 곳에서 인라인됩니다.
-fms-확장
암시적 int와 같은 MFC에서 사용되는 구문에 대한 Wpedantic 경고를 비활성화합니다.
비표준 구문을 통해 멤버 함수에 대한 포인터를 가져옵니다.
-fno-nonansi-내장
ANSI/ISO C에서 요구하지 않는 내장 함수 선언을 비활성화합니다.
"ffs", "alloca", "_exit", "index", "bzero", "conjf" 및 기타 관련 항목 포함
기능.
-fnothrow-opt
"noexcept" 사양인 것처럼 "throw()" 예외 사양을 처리합니다.
예외 없이 함수에 대한 텍스트 크기 오버헤드를 줄이거나 제거
사양. 함수에 중요하지 않은 유형의 지역 변수가 있는 경우
소멸자, 예외 사양은 실제로 함수를 더 작게 만듭니다.
이러한 변수에 대한 EH 정리를 최적화할 수 있습니다. 의미론적 효과는
그러한 예외 사양이 있는 함수에서 예외가 발생했음을 의미합니다.
"예기치 않은" 대신 "종료"에 대한 호출이 발생합니다.
-fno 연산자 이름
연산자 이름 키워드 "and", "bitand", "bitor", "compl", "not", "or"를 처리하지 마십시오.
키워드로 동의어로 "xor".
-fno-선택 사항-diags
표준에서 컴파일러가 발행할 필요가 없는 진단을 비활성화합니다.
현재, G++에서 발행한 유일한 진단은 다음을 가진 이름에 대한 진단입니다.
클래스 내의 여러 의미.
-허용
비준수 코드에 대한 일부 진단을 오류에서 경고로 다운그레이드합니다. 따라서,
사용 -허용 일부 부적합 코드를 컴파일할 수 있습니다.
-fno-pretty-템플릿
오류 메시지가 함수 템플릿의 특수화를 참조할 때 컴파일러는
일반적으로 템플릿의 서명과 템플릿 인수를 인쇄하고
서명의 모든 typedef 또는 typenames(예: "void f(T) [with T = int]"
어떤 템플릿이 관련되어 있는지 명확하도록 "void f(int)")보다. 오류가 발생했을 때
메시지가 클래스 템플릿의 특수화를 참조하는 경우 컴파일러는 다음을 생략합니다.
해당 템플릿의 기본 템플릿 인수와 일치하는 템플릿 인수. 만약에
이러한 동작 중 하나는 오류 메시지를 이해하는 것보다 더 어렵게 만듭니다.
더 쉽게, 당신은 사용할 수 있습니다 -fno-pretty-템플릿 비활성화합니다.
-프레포
링크 시간에 자동 템플릿 인스턴스화를 활성화합니다. 이 옵션은 또한 다음을 의미합니다.
-fno-암시적 템플릿.
-fno-rtti
에서 사용할 가상 기능이 있는 모든 클래스에 대한 정보 생성을 비활성화합니다.
C++ 런타임 유형 식별 기능("dynamic_cast" 및 "typeid"). 만약 너라면
언어의 해당 부분을 사용하지 마십시오. 이 플래그를 사용하여 공간을 절약할 수 있습니다.
예외 처리는 동일한 정보를 사용하지만 G++는 이를 다음과 같이 생성합니다.
필요. "dynamic_cast" 연산자는 필요하지 않은 캐스트에 계속 사용할 수 있습니다.
런타임 유형 정보, 즉 "void *" 또는 명확한 기본 클래스로의 캐스트.
-fsize-deallocation
내장 전역 선언 활성화
void 연산자 삭제 (void *, std::size_t) noexcept;
void 연산자 delete[] (void *, std::size_t) noexcept;
C++14에 도입된 대로. 이것은 사용자 정의 대체 할당 해제에 유용합니다.
예를 들어 객체의 크기를 사용하여 할당 해제를 더 빠르게 하는 함수입니다.
기본적으로 활성화됨 -std = c ++ 14 그리고 위. 깃발 -크기 할당 해제 경고
정의를 추가할 수 있는 장소에 대해
-fstats
컴파일이 끝날 때 프런트 엔드 처리에 대한 통계를 내보냅니다. 이것
정보는 일반적으로 G++ 개발 팀에만 유용합니다.
-fstrict 열거형
열거형의 값을 가정하여 컴파일러가 최적화할 수 있도록 합니다.
열거형 값 중 하나일 수 있습니다(C++ 표준에 정의됨).
기본적으로 필요한 최소 비트 수로 표현할 수 있는 값
모든 열거자를 나타냄). 이 가정은 프로그램이 다음을 사용하는 경우 유효하지 않을 수 있습니다.
임의의 정수 값을 열거형으로 변환하는 캐스트.
-ftemplate-역추적 제한=n
단일 경고 또는 오류에 대한 최대 템플릿 인스턴스화 메모 수 설정
에 n. 기본값은 10입니다.
-f템플릿-깊이=n
템플릿 클래스의 최대 인스턴스화 깊이를 다음으로 설정합니다. n. 한도
템플릿 중 무한 재귀를 감지하려면 템플릿 인스턴스화 깊이가 필요합니다.
클래스 인스턴스화. ANSI/ISO C++ 준수 프로그램은 최대값에 의존해서는 안 됩니다.
깊이가 17보다 큽니다(C++1024에서 11로 변경됨). 기본값은 900입니다.
컴파일러는 일부 상황에서 1024에 도달하기 전에 스택 공간이 부족할 수 있습니다.
-fno-threadsafe-정적
스레드용 C++ ABI에 지정된 루틴을 사용하기 위해 추가 코드를 내보내지 마십시오.
로컬 정적의 안전한 초기화. 이 옵션을 사용하여 코드 크기를 줄일 수 있습니다.
스레드로부터 안전할 필요가 없는 코드에서 약간.
-퓨즈 -cxa-atexit
"__cxa_atexit"를 사용하여 정적 저장 기간이 있는 객체의 소멸자를 등록합니다.
"atexit" 기능이 아닌 기능. 이 옵션은 완전히
정적 소멸자의 표준 호환 처리, 그러나 C 라이브러리의 경우에만 작동합니다.
"__cxa_atexit"를 지원합니다.
-fno-use-cxa-get-예외-ptr
"__cxa_get_exception_ptr" 런타임 루틴을 사용하지 마십시오. 이로 인해
"std::uncaught_exception"은 올바르지 않지만 런타임 루틴이 다음과 같은 경우 필요합니다.
사용 불가.
-fvisibility-inlines-hidden
이 스위치는 사용자가 포인터를 인라인으로 비교하려고 시도하지 않음을 선언합니다.
두 함수의 주소가 서로 다른 함수 또는 메서드
공유 객체.
이것의 효과는 GCC가 인라인 메소드를 다음과 같이 효과적으로 표시할 수 있다는 것입니다.
내보내기에 나타나지 않도록 "__attribute__ ((가시성("hidden")))"
DSO의 테이블이며 DSO 내에서 사용될 때 PLT 간접 참조가 필요하지 않습니다.
이 옵션을 활성화하면 DSO의 로드 및 링크 시간에 극적인 영향을 미칠 수 있습니다.
라이브러리가 무거워지면 동적 내보내기 테이블의 크기를 크게 줄입니다.
템플릿 사용.
이 스위치의 동작은 메서드를 숨김으로 표시하는 것과 완전히 동일하지 않습니다.
함수에 국한된 정적 변수에 영향을 미치지 않거나 원인
컴파일러는 함수가 하나의 공유 객체에만 정의되어 있다고 추론합니다.
메소드의 효과를 무효화하기 위해 명시적으로 가시성이 있는 것으로 메소드를 표시할 수 있습니다.
해당 방법으로 전환합니다. 예를 들어 포인터를 비교하려는 경우
특정 인라인 메서드의 경우 기본 가시성이 있는 것으로 표시할 수 있습니다. 표시
명시적 가시성으로 클래스를 둘러싸는 것은 효과가 없습니다.
명시적으로 인스턴스화된 인라인 메서드는 링크로 이 옵션의 영향을 받지 않습니다.
그렇지 않으면 공유 라이브러리 경계를 넘을 수 있습니다.
-fvisibility-ms-compat
이 플래그는 가시성 설정을 사용하여 GCC의 C++ 연결 모델을 만들려고 시도합니다.
Microsoft Visual Studio와 호환됩니다.
플래그는 GCC의 연결 모델을 다음과 같이 변경합니다.
1. 다음과 같이 기본 가시성을 "숨김"으로 설정합니다. -fvisibility=숨김.
2. 멤버가 아닌 유형은 기본적으로 숨겨져 있지 않습니다.
3. 명시적 가시성이 없는 유형에 대해 단일 정의 규칙이 완화됩니다.
둘 이상의 공유 객체에 정의된 사양: 해당 선언
이 옵션이 사용되지 않을 때 허용되는 경우 허용됩니다.
새 코드에서는 다음을 사용하는 것이 좋습니다. -fvisibility=숨김 해당 클래스를 내보냅니다.
외부에서 볼 수 있도록 설계되었습니다. 불행히도 코드가 의존하는 것은 가능합니다.
아마도 실수로 Visual Studio 동작에서.
이러한 변경의 결과 중에는 동일한 유형의 정적 데이터 멤버가
이름은 같지만 다른 공유 객체에 정의되어 있으므로 변경
하나는 다른 하나를 변경하지 않습니다. 에 정의된 함수 멤버에 대한 포인터
다른 공유 개체는 동일하게 비교할 수 없습니다. 이 플래그가 주어졌을 때,
동일한 이름을 가진 유형을 다르게 정의하는 ODR 위반.
-fvtable-확인=[표준|미리|없음]
켜기(또는 끄기를 사용하는 경우 -fvtable-verify=없음) 에서 확인하는 보안 기능
런타임, 모든 가상 호출에 대해 호출이 통과하는 vtable 포인터
made는 객체의 유형에 대해 유효하며 손상되거나 덮어쓰여지지 않았습니다.
런타임에 잘못된 vtable 포인터가 감지되면 오류가 보고되고
프로그램 실행이 즉시 중단됩니다.
이 옵션을 사용하면 프로그램 시작 시 런타임 데이터 구조가 빌드됩니다.
vtable 포인터를 확인하는 데 사용됩니다. 옵션 표준 and 미리 제어
이러한 데이터 구조가 구축되는 시점. 두 경우 모두 데이터 구조는
실행이 "main"에 도달하기 전에 빌드됩니다. 사용 -fvtable-verify=표준 데이터의 원인
공유 라이브러리가 로드되고 초기화된 후 빌드될 구조.
-fvtable-verify=사전 초기화 공유 라이브러리가 생성되기 전에 빌드되도록 합니다.
로드 및 초기화됩니다.
이 옵션이 다른 값으로 명령줄에 여러 번 나타나는 경우
지정된, 없음 두 가지 모두에 대해 가장 높은 우선 순위를 가짐 표준 and 미리; 미리 소요
우선권 표준.
-fvtv-디버그
와 함께 사용할 때 -fvtable-verify=표준 or -fvtable-verify=사전 초기화원인
vtable 확인 기능에 대한 런타임 기능의 디버그 버전은 다음과 같습니다.
라고 불리는. 이 플래그는 또한 컴파일러가 어떤 vtable에 대한 정보를 기록하도록 합니다.
각 클래스에 대해 찾은 포인터. 이 정보는 다음과 같은 파일에 기록됩니다.
vtv_set_ptr_data.log 환경 변수에 의해 명명된 디렉토리에서 VTV_LOGS_DIR
정의된 경우 또는 그렇지 않은 경우 현재 작업 디렉토리.
참고: 이 기능은 추가 데이터를 로그 파일에 저장합니다. 새로운 로그 파일을 원하시면
기존 것을 삭제하십시오.
-fvtv-카운트
이것은 디버깅 플래그입니다. 와 함께 사용할 때 -fvtable-verify=표준 or
-fvtable-verify=사전 초기화, 이로 인해 컴파일러는 총
발생하는 가상 통화 및 삽입한 확인 횟수. 또한
삽입한 특정 런타임 라이브러리 함수에 대한 호출 수를 계산하고
각 컴파일 단위에 대해 이 정보를 기록합니다. 컴파일러는 이 정보를 씁니다.
라는 파일에 vtv_count_data.log 환경 변수에 의해 명명된 디렉토리에서
VTV_LOGS_DIR 정의된 경우 또는 그렇지 않은 경우 현재 작업 디렉토리. 또한
각 클래스에 대한 vtable 포인터 집합의 크기를 계산하고 이 정보를 씁니다.
에 vtv_class_set_sizes.log 동일한 디렉토리에 있습니다.
참고: 이 기능은 추가 데이터를 로그 파일에 저장합니다. 새로운 로그 파일을 얻으려면 다음을 수행하십시오.
기존 것을 삭제하십시오.
-fno-약한
링커에서 제공하는 경우에도 약한 기호 지원을 사용하지 마십시오. 기본적으로 G++
사용 가능한 경우 약한 기호를 사용합니다. 이 옵션은 테스트용으로만 존재하며,
최종 사용자가 사용해서는 안 됩니다. 결과적으로 열등한 코드가 생성되고 이점이 없습니다.
이 옵션은 G++의 향후 릴리스에서 제거될 수 있습니다.
-nostdinc++
C++에 특정한 표준 디렉토리에서 헤더 파일을 검색하지 마십시오.
여전히 다른 표준 디렉토리를 검색합니다. (이 옵션은 빌드할 때 사용됩니다.
C++ 라이브러리.)
또한 이러한 최적화, 경고 및 코드 생성 옵션은 의미가 있습니다.
C++ 프로그램의 경우:
-와비 (C, Objective-C, C++ 및 Objective-C++만 해당)
명시적일 때 -fabi 버전=n 옵션이 사용되면 G++가 생성할 때 경고합니다.
공급업체 중립적인 C++ ABI와 호환되지 않는 코드입니다. 지금 G++ 이후로
기본값은 -fabi 버전=0, -와비 이전 ABI 버전이
선택됨( -fabi 버전=n) 또는 이전 호환성 버전이 선택되었습니다(
-와비=n or -fabi 호환 버전=n).
그러한 모든 경우에 대해 경고하기 위해 노력했지만, 아마도 일부
G++가 호환되지 않는 코드를 생성하더라도 경고되지 않은 경우.
코드가 다음과 같은 경우에도 경고가 발생하는 경우가 있습니다.
생성된 호환됩니다.
다음 사항이 염려되는 경우 이러한 경고를 피하기 위해 코드를 다시 작성해야 합니다.
G++로 생성된 코드는 다음으로 생성된 코드와 바이너리 호환되지 않을 수 있다는 사실
다른 컴파일러.
-와비 호환성에 대해 경고하기 위해 명시적 버전 번호와 함께 사용할 수도 있습니다.
특정한 -fabi 버전 수준, 예 -와비=2 관련 변경 사항에 대해 경고하기 위해
-fabi 버전=2. 버전 번호 지정도 설정 -fabi 호환 버전=n.
알려진 비호환성 -fabi 버전=2 (GCC 3.4에서 기본값으로
4.9)에는 다음이 포함됩니다.
* 참조 유형의 유형이 아닌 템플릿 매개변수가 있는 템플릿이 수정되었습니다.
틀리게:
외부 정수 N;
주형 구조체 S {};
공허 n (S ) {2}
이것은 에서 수정되었습니다. -fabi 버전=3.
* "__attribute((vector_size))"를 사용하여 선언된 SIMD 벡터 유형은
벡터를 사용하는 함수의 오버로드를 허용하지 않는 비표준 방식
다른 크기의.
맹글링이 변경되었습니다. -fabi 버전=4.
* "__attribute((const))" 및 "noreturn"은 유형 한정자로 맹글링되었으며,
일반 선언의 "decltype"이 접혀 있습니다.
이러한 맹글링 문제는 다음에서 수정되었습니다. -fabi 버전=5.
* 가변 함수에 인수로 전달된 범위 열거자는 다음과 같이 승격됩니다.
범위가 지정되지 않은 열거자로 인해 "va_arg"가 불평합니다. 대부분의 타겟에서는 그렇지 않습니다.
인수를 전달할 방법이 없기 때문에 실제로 ABI를 전달하는 매개변수에 영향을 줍니다.
"int"보다 작습니다.
또한 ABI는 템플릿 인수 팩 "const_cast"의 맹글링을 변경했습니다.
"static_cast", 접두사 증가/감소 및 클래스 범위 함수로 사용
템플릿 인수.
이러한 문제는 에서 수정되었습니다. -fabi 버전=6.
* 기본 인수 범위의 Lambdas가 잘못 수정되었으며 ABI가 변경되었습니다.
"nullptr_t"의 맹글링.
이러한 문제는 에서 수정되었습니다. -fabi 버전=7.
* function-cv-qualifier를 사용하여 함수 유형을 맹글링할 때 규정되지 않은
함수 유형이 대체 후보로 잘못 처리되었습니다.
이것은 에서 수정되었습니다. -fabi 버전=8.
또한 psABI 관련 변경 사항에 대해 경고합니다. 이 시점에서 알려진 psABI 변경
과 같습니다 :
* SysV/x86-64의 경우 "long double" 멤버가 있는 공용체는 다음과 같이 메모리에 전달됩니다.
psABI에 명시되어 있습니다. 예를 들어:
유니온 유 {
긴 이중 LD;
int i;
};
"union U"는 항상 메모리에 전달됩니다.
-와비태그 (C++ 및 Objective-C++만 해당)
ABI 태그가 있는 유형이 해당 ABI 태그가 없는 컨텍스트에서 사용될 때 경고합니다.
만나다 C + + Attributes ABI 태그에 대한 자세한 내용은
-Wctor-dtor-프라이버시 (C++ 및 Objective-C++만 해당)
클래스의 모든 생성자 또는 소멸자로 인해 클래스를 사용할 수 없는 것처럼 보일 때 경고합니다.
클래스는 비공개이며 친구나 공개 정적 멤버 함수가 없습니다.
또한 비공개가 아닌 메서드가 없고 비공개 멤버가 하나 이상 있는 경우 경고합니다.
생성자나 소멸자가 아닌 함수.
-Wdelete-non-virtual-dtor (C++ 및 Objective-C++만 해당)
"delete"가 가상 객체가 있는 클래스의 인스턴스를 파괴하는 데 사용될 때 경고합니다.
함수 및 비가상 소멸자. 파생된 인스턴스를 삭제하는 것은 안전하지 않습니다.
기본 클래스에 가상이 없는 경우 기본 클래스에 대한 포인터를 통해 클래스
폐물 소각로. 이 경고는 다음에 의해 활성화됩니다. -벽.
-문자 접미사 (C++ 및 Objective-C++만 해당)
문자열이나 문자 리터럴 뒤에 ud 접미사가 올 때 경고하지 않습니다.
밑줄로 시작합니다. 준수 확장으로서 GCC는 이러한 접미사를 다음과 같이 취급합니다.
코드와의 하위 호환성을 유지하기 위해 별도의 전처리 토큰
"에서 서식 매크로를 사용하는 ". 예를 들어:
#정의 __STDC_FORMAT_MACROS
#포함하다
#포함하다
int main () {
int64_t i64 = 123;
printf("내 int64: %"PRId64"\n", i64);
}
이 경우 "PRId64"는 별도의 전처리 토큰으로 취급됩니다.
이 경고는 기본적으로 활성화되어 있습니다.
- 축소 (C++ 및 Objective-C++만 해당)
C++11에서 금지하는 축소 변환이 다음 내에서 발생하면 경고 { }, 예.
정수 i = { 2.2 }; // 오류: double에서 int로 축소
이 플래그는 -벽 and -Wc++11-호환.
와 -std = c ++ 11, - 좁혀지지 않는 표준에서 요구하는 진단을 억제합니다.
이것은 잘 구성된 코드의 의미에 영향을 미치지 않습니다. 축소 전환
SFINAE 컨텍스트에서 여전히 잘못된 형식으로 간주됩니다.
-아니요 (C++ 및 Objective-C++만 해당)
함수 호출로 인해 noexcept-expression이 false로 평가될 때 경고
throw되지 않는 예외 사양(예: "throw()" 또는
"noexcept") 예외를 throw하지 않는 것으로 컴파일러에 알려져 있습니다.
-W비 가상 dtor (C++ 및 Objective-C++만 해당)
클래스에 가상 함수와 액세스 가능한 비가상 소멸자가 있을 때 경고
그 자체 또는 접근 가능한 다형성 기본 클래스에서, 이 경우 가능하지만
클래스 자체에 대한 포인터를 통해 파생 클래스의 인스턴스를 삭제하는 것은 안전하지 않습니다.
또는 기본 클래스. 이 경고는 다음과 같은 경우 자동으로 활성화됩니다. -웨프씨++ 이 지정됩니다.
- Wreorder (C++ 및 Objective-C++만 해당)
코드에 지정된 멤버 이니셜라이저의 순서가 순서와 일치하지 않을 때 경고합니다.
그들이 실행되어야합니다. 예를 들어:
구조체 A {
int i;
정수 j;
A(): j(0), i(1) { }
};
컴파일러는 "i" 및 "j"에 대한 멤버 이니셜라이저를 재정렬하여 일치시킵니다.
구성원의 선언 순서에 따라 해당 내용에 대한 경고를 표시합니다. 이 경고는
활성화 된 -벽.
-fext-숫자-리터럴 (C++ 및 Objective-C++만 해당)
허수, 고정 소수점 또는 기계 정의 리터럴 숫자 접미사를 GNU로 허용
확장. 이 옵션을 끄면 이러한 접미사는 C++11 사용자로 처리됩니다.
정의된 리터럴 숫자 접미사. 모든 C++11 이전 방언에 대해 기본적으로 켜져 있습니다.
모든 GNU 방언: -std = c ++ 98, -std=gnu++98, -std=gnu++11, -std=gnu++14. 이
옵션은 ISO C++11 이후 기본적으로 꺼져 있습니다(-std = c ++ 11, ...).
다음 - 와... 옵션은 영향을 받지 않습니다 -벽.
-웨프씨++ (C++ 및 Objective-C++만 해당)
Scott Meyers의 다음 스타일 지침 위반에 대해 경고합니다. 유효한
C + + 일련의 책:
* 동적으로 클래스에 대한 복사 생성자와 할당 연산자를 정의합니다.
할당된 메모리.
* 생성자에서 할당보다 초기화를 선호합니다.
* "operator="가 *this에 대한 참조를 반환하도록 합니다.
* 객체를 반환해야 할 때 참조를 반환하려고 하지 마십시오.
* 증가 및 감소 연산자의 접두사와 후위 형식을 구별합니다.
* 절대 "&&", "||" 또는 ","를 오버로드하지 마십시오.
이 옵션은 또한 -W비 가상 dtor, 이것은 또한 효과적인 C++ 중 하나입니다.
권장 사항. 그러나 가상의 부족에 대해 경고하기 위해 검사가 확장됩니다.
접근 가능한 비다형성 기본 클래스에서도 소멸자입니다.
이 옵션을 선택할 때 표준 라이브러리 헤더가 모든
이 지침의; 사용하다 GREP -v 이러한 경고를 필터링합니다.
-Wstrict-null-센티넬 (C++ 및 Objective-C++만 해당)
캐스트되지 않은 "NULL"을 센티넬로 사용하는 것에 대해 경고합니다. GCC로만 컴파일할 때
"NULL"이 "__null"로 정의되어 있으므로 이것은 유효한 센티넬입니다. 비록 null이지만
널 포인터가 아닌 포인터 상수, 동일한 크기가 보장됨
포인터로. 그러나 이 사용은 다른 컴파일러 간에 이식할 수 없습니다.
- 템플릿이 아닌 친구 (C++ 및 Objective-C++만 해당)
템플릿 내에서 템플릿화되지 않은 친구 함수가 선언되면 경고를 비활성화합니다.
G++에서 명시적 템플릿 사양 지원의 출현 이후,
친구가 비정규 ID입니다(즉, 친구 푸(정수)), C++ 언어 사양
친구가 템플릿이 아닌 일반 함수를 선언하거나 정의하도록 요구합니다. (부분
14.5.3). G++가 명시적 사양을 구현하기 전에, unqualified-ids는
템플릿화된 기능의 특정 전문화로 해석됩니다. 왜냐하면 이건
비준수 동작은 더 이상 G++의 기본 동작이 아닙니다.
- 템플릿이 아닌 친구 컴파일러가 잠재적인 문제에 대해 기존 코드를 확인할 수 있습니다.
반점이며 기본적으로 켜져 있습니다. 이 새로운 컴파일러 동작은 다음을 사용하여 끌 수 있습니다.
- 템플릿이 아닌 친구, 준수 컴파일러 코드를 유지하지만
유용한 경고.
-Wold 스타일 캐스트 (C++ 및 Objective-C++만 해당)
C++ 프로그램 내에서 void가 아닌 유형으로의 이전 스타일(C 스타일) 캐스트가 사용되는 경우 경고합니다.
새로운 스타일의 캐스트("dynamic_cast", "static_cast", "reinterpret_cast" 및
"const_cast")는 의도하지 않은 효과에 덜 취약하고 검색하기 훨씬 쉽습니다.
-오버로딩된 가상 (C++ 및 Objective-C++만 해당)
함수 선언이 기본 클래스에서 가상 함수를 숨길 때 경고합니다. 을위한
예:
구조체 A {
가상 무효 f();
};
구조체 B: 공개 A {
무효 f(int);
};
"f"의 "A" 클래스 버전은 "B"에 숨겨져 있고 다음과 같은 코드가 있습니다.
ㄴ*ㄴ;
b->f();
컴파일에 실패합니다.
-Wno-pmf-변환 (C++ 및 Objective-C++만 해당)
멤버 함수에 대한 바인딩된 포인터를 일반으로 변환하기 위한 진단 비활성화
바늘.
-Wsign-프로모션 (C++ 및 Objective-C++만 해당)
과부하 해결이 unsigned 또는 enumerated 유형에서 다음으로 승격을 선택할 때 경고합니다.
서명된 유형, 동일한 크기의 부호 없는 유형으로의 변환. 이전의
G++ 버전은 서명되지 않은 상태를 유지하려고 시도했지만 표준은 현재
행동.
옵션 제어 오브젝티브-C and 목표-C++ 방언
(참고: 이 매뉴얼은 Objective-C 및 Objective-C++ 언어를 설명하지 않습니다.
그들 자신.
이 섹션에서는 Objective-C에서만 의미 있는 명령줄 옵션에 대해 설명합니다.
및 Objective-C++ 프로그램. 또한 대부분의 언어 독립적인 GNU를 사용할 수 있습니다.
컴파일러 옵션. 예를 들어 파일을 컴파일할 수 있습니다. some_class.m 이렇게 :
gcc -g -fgnu-런타임 -O -c some_class.m
이 예에서, -fgnu-런타임 Objective-C 및 Objective-C++ 전용 옵션입니다.
프로그램들; GCC에서 지원하는 모든 언어로 다른 옵션을 사용할 수 있습니다.
Objective-C는 C 언어의 확장이므로 Objective-C 컴파일은
C 프론트엔드에 특정한 옵션을 사용할 수도 있습니다(예: -전통적인). 마찬가지로,
Objective-C++ 컴파일은 C++ 특정 옵션을 사용할 수 있습니다(예: -와비).
다음은 다음과 같은 옵션 목록입니다. 만 Objective-C 및 Objective-C++ 컴파일용
프로그램 :
-f상수-문자열-클래스=클래스 이름
클래스 이름 각 리터럴 문자열에 대해 인스턴스화할 클래스 이름으로
"@"..."" 구문으로 지정됩니다. 기본 클래스 이름은 "NXConstantString"입니다.
GNU 런타임이 사용 중이고 NeXT 런타임이 사용 중인 경우 "NSConstantString"
사용(아래 참조). NS -f상수-cfstrings 옵션이 있는 경우 옵션을 재정의합니다.
-f상수-문자열-클래스 설정하고 "@"..."" 리터럴이 상수로 배치되도록 합니다.
CoreFoundation 문자열.
-fgnu-런타임
표준 GNU Objective-C 런타임과 호환되는 개체 코드를 생성합니다. 이것은
대부분의 시스템 유형에 대한 기본값입니다.
-fnext-런타임
NeXT 런타임과 호환되는 출력을 생성합니다. 이것은 NeXT 기반의 기본값입니다.
Darwin 및 Mac OS X를 포함한 시스템. 매크로 "__NEXT_RUNTIME__"은 다음과 같은 경우 미리 정의됩니다.
(그리고 경우에만) 이 옵션이 사용됩니다.
-fno-nil-수신기
여기에서 모든 Objective-C 메시지 디스패치("[receiver message:arg]")를 가정합니다.
번역 단위는 수신기가 "nil"이 아닌지 확인합니다. 이것은 더 많은 것을 허용합니다
사용할 런타임의 효율적인 진입점. 이 옵션은 다음에서만 사용할 수 있습니다.
NeXT 런타임 및 ABI 버전 0 또는 1과 함께 사용합니다.
-fobjc-abi-버전=n
버전 사용 n 선택한 런타임에 대한 Objective-C ABI의 이 옵션은
현재 NeXT 런타임에 대해서만 지원됩니다. 이 경우 버전 0은
속성 및 기타 Objective-C 32을 지원하지 않는 기존(2.0비트) ABI
추가. 버전 1은 속성 및
다른 Objective-C 2.0 추가 사항. 버전 2는 최신(64비트) ABI입니다. 아무것도 없다면
지정된 경우 기본값은 0비트 대상 시스템의 경우 버전 32이고 2비트의 경우 버전 64입니다.
대상 기계.
-fobjc-call-cxx-cdtors
각 Objective-C 클래스에 대해 인스턴스 변수가 C++ 객체인지 확인하십시오.
중요하지 않은 기본 생성자를 사용합니다. 그렇다면 특수 "-(id)
.cxx_construct" 인스턴스 메소드는 모든 시스템에서 중요하지 않은 기본 생성자를 실행합니다.
이러한 인스턴스 변수를 순서대로 나열한 다음 "self"를 반환합니다. 마찬가지로
인스턴스 변수는 중요하지 않은 소멸자가 있는 C++ 객체이며, 그렇다면
이러한 모든 기본 소멸자를 실행하는 특별한 "- (void) .cxx_destruct" 메서드
역순으로.
따라서 "-(id) .cxx_construct" 및 "-(void) .cxx_destruct" 메서드만 생성됩니다.
현재 Objective-C 클래스에 선언된 인스턴스 변수에 대해 작동합니다.
슈퍼클래스에서 상속됨. Objective-C 런타임의 책임은 다음과 같습니다.
개체의 상속 계층 구조에서 이러한 모든 메서드를 호출합니다. "-(아이디)
.cxx_construct" 메서드는 새 개체 직후 런타임에서 호출됩니다.
인스턴스가 할당됩니다. "- (void) .cxx_destruct" 메서드가 즉시 호출됩니다.
런타임이 개체 인스턴스를 할당 해제하기 전에.
이 글을 쓰는 시점에서 Mac OS X 10.4 이상의 NeXT 런타임만 다음을 지원합니다.
"-(id) .cxx_construct" 및 "-(void) .cxx_destruct" 메서드를 호출합니다.
-fobjc-직접 발송
메시지 디스패처로 빠른 점프를 허용합니다. 다윈에서 이것은 다음을 통해 수행됩니다.
커뮤 페이지.
-fobjc-예외
Objective-C에서 구조적 예외 처리에 대한 구문 지원을 활성화합니다.
C++ 및 Java에서 제공하는 것. 이 옵션은 Objective-C를 사용하는 데 필요합니다.
키워드 @try, @throw, @catch, @finally 및 @synchronized. 이 옵션을 사용할 수 있습니다
GNU 런타임과 NeXT 런타임 모두 사용 가능(그러나
Mac OS X 10.2 및 이전 버전의 NeXT 런타임).
-fobjc-gc
Objective-C 및 Objective-C++ 프로그램에서 가비지 수집(GC)을 활성화합니다. 이 옵션
NeXT 런타임에서만 사용할 수 있습니다. GNU 런타임에 다른 쓰레기가 있습니다.
특별한 컴파일러 플래그가 필요하지 않은 컬렉션 구현.
-fobjc-nilcheck
ABI 버전 2가 있는 NeXT 런타임의 경우 메서드에서 nil 수신기를 확인합니다.
실제 메서드 호출을 수행하기 전에 호출합니다. 이것은 기본값이며 다음을 수행할 수 있습니다.
사용 중지 -fno-objc-nilcheck. 클래스 메소드 및 수퍼 호출은 절대 확인되지 않습니다.
이 플래그가 무엇으로 설정되든 이런 식으로 nil에 대해. 현재 이 플래그는
GNU 런타임이나 NeXT 런타임 ABI의 이전 버전을 사용할 때는 아무 것도 없습니다.
-fobjc-std = OBJC1.
GCC 1.0에서 인식하는 언어인 Objective-C 4.0의 언어 구문을 따릅니다.
이것은 C/C++ 언어에 대한 Objective-C 추가에만 영향을 미칩니다. 영향을 미치지 않는다
별도의 C/C++ 방언으로 제어되는 C/C++ 표준 준수
옵션 플래그. 이 옵션이 Objective-C 또는 Objective-C++와 함께 사용되는 경우
컴파일러에서 GCC 4.0에서 인식하지 못하는 모든 Objective-C 구문은 거부됩니다. 이것
Objective-C 코드가 다음과 같이 컴파일될 수 있는지 확인해야 하는 경우에 유용합니다.
이전 버전의 GCC.
-freplace-objc-클래스
지시하는 특수 마커를 방출합니다. ld(1) 결과 객체에서 정적으로 링크하지 않도록
파일 및 허용 딜(1) 대신 런타임에 로드합니다. 이것은에서 사용됩니다
Fix-and-Continue 디버깅 모드와 함께 사용하면 개체 파일이
질문은 프로그램 과정에서 다시 컴파일되고 동적으로 다시 로드될 수 있습니다.
프로그램 자체를 다시 시작할 필요 없이 실행됩니다. 현재, Fix-and-
계속 기능은 Mac에서 NeXT 런타임과 함께 사용할 때만 사용할 수 있습니다.
OS X 10.3 이상.
-fzero-링크
NeXT 런타임용으로 컴파일할 때 컴파일러는 일반적으로 다음 호출을 대체합니다.
"objc_getClass("...")"(컴파일 시간에 클래스 이름을 알고 있는 경우)
런타임을 개선하는 로드 시간에 초기화되는 정적 클래스 참조
성능. 지정 -fzero-링크 플래그는 이 동작을 억제하고
"objc_getClass("...")"에 대한 호출이 유지됩니다. 이것은 Zero-Link에서 유용합니다.
개별 클래스 구현을 수정할 수 있기 때문에 디버깅 모드
프로그램 실행 중. GNU 런타임은 현재 항상 호출을 유지합니다.
"objc_get_class("...")" 명령줄 옵션에 관계없이.
-fno-local-ivars
기본적으로 Objective-C의 인스턴스 변수는 로컬인 것처럼 액세스할 수 있습니다.
선언된 클래스의 메서드 내에서 변수.
인스턴스 변수와 로컬로 선언된 다른 변수 간의 섀도잉
클래스 메서드 내부 또는 전역적으로 동일한 이름을 사용합니다. 지정 -fno-local-ivars
플래그는 이 동작을 비활성화하여 변수 섀도잉 문제를 방지합니다.
-fivar-가시성=[공개|보호|사설|꾸러미]
기본 인스턴스 변수 가시성을 지정된 옵션으로 설정하여 인스턴스가
액세스 수정자 지시문 범위 외부에서 선언된 변수는 기본적으로
지정된 가시성.
-gen-decls
소스 파일에 있는 모든 클래스에 대한 인터페이스 선언을 다음과 같은 파일에 덤프합니다.
소스 이름.decl.
-Wassign-인터셉트 (Objective-C 및 Objective-C++만 해당)
가비지 수집기가 Objective-C 할당을 가로챌 때마다 경고합니다.
-Wno 프로토콜 (Objective-C 및 Objective-C++만 해당)
클래스가 프로토콜을 구현하도록 선언된 경우 모든 메서드에 대해 경고가 발행됩니다.
클래스에 의해 구현되지 않은 프로토콜에서. 기본 동작은
클래스에서 명시적으로 구현되지 않은 모든 메서드에 대해 경고를 발행합니다.
메서드 구현은 슈퍼클래스에서 상속됩니다. 사용하는 경우 -Wno 프로토콜
옵션을 선택하면 수퍼 클래스에서 상속된 메소드가 구현된 것으로 간주됩니다.
그리고 그들에 대한 경고가 발행되지 않습니다.
-W선택자 (Objective-C 및 Objective-C++만 해당)
동일한 선택기에 대해 유형이 다른 여러 메소드가 발견되는 경우 경고
편집. 검사는 최종 단계의 메소드 목록에서 수행됩니다.
편집. 또한 에 나타나는 각 선택기에 대해 검사가 수행됩니다.
"@selector(...)" 표현식 및 해당 선택기에 대한 해당 메소드는
컴파일 중 발견. 이러한 검사는 마지막에만 메서드 테이블을 스캔하기 때문에
컴파일의 마지막 단계가 다음과 같을 경우 이러한 경고가 생성되지 않습니다.
예를 들어 컴파일 중에 오류가 발견되었거나
-fsyntax 전용 옵션을 사용 중입니다.
-Wstrict 선택자 일치 (Objective-C 및 Objective-C++만 해당)
인수 및/또는 반환 유형이 다른 여러 메서드가 발견되면 경고합니다.
이 선택기를 사용하여 수신자에게 메시지를 보내려고 할 때 주어진 선택기
"ID" 또는 "클래스"를 입력합니다. 이 플래그가 꺼져 있으면(기본 동작),
발견된 차이점이
같은 크기와 정렬.
-Wunddeclared-선택자 (Objective-C 및 Objective-C++만 해당)
선언되지 않은 선택기를 참조하는 "@selector(...)" 표현식이 발견되면 경고합니다. NS
해당 이름을 가진 메소드가 이전에 선언되지 않은 경우 선택자는 선언되지 않은 것으로 간주됩니다.
@interface 또는 @protocol에서 명시적으로 "@selector(...)" 표현식
선언 또는 암시적으로 @implementation 섹션에서. 이 옵션은 항상
"@selector(...)" 표현식이 발견되는 즉시 검사하지만, -W선택자 만
컴파일의 마지막 단계에서 검사를 수행합니다. 이것은 또한 코딩을 시행합니다
메소드와 선택자를 사용하기 전에 선언해야 하는 스타일 규칙.
-print-objc-런타임-정보
값으로 전달되는 가장 큰 구조를 설명하는 C 헤더를 생성합니다(있는 경우).
옵션 에 Control 진단 메시지 서식
전통적으로 진단 메시지는 출력 장치의
측면(예: 너비, ...). 아래에 설명된 옵션을 사용하여 제어할 수 있습니다.
진단 메시지의 형식화 알고리즘(예: 줄당 문자 수, 빈도)
소스 위치 정보를 보고해야 합니다. 일부 언어 프런트 엔드는
이러한 옵션을 존중하지 마십시오.
-f메시지 길이=n
다음 줄에 맞도록 오류 메시지의 형식을 지정하십시오. n 문자. 만약에 n is
XNUMX이면 줄 바꿈이 수행되지 않습니다. 각 오류 메시지는 한 줄에 나타납니다.
이것은 모든 프런트 엔드의 기본값입니다.
-fdiagnostics-show-location=한번
줄 바꿈 모드에서만 의미가 있습니다. 진단 메시지 보고자에게 다음을 지시합니다.
소스 위치 정보 방출 일단; 즉, 메시지가 너무 길어서 맞지 않는 경우
단일 물리적 라인에 있고 래핑되어야 하는 경우 소스 위치가 내보내지지 않습니다.
(접두사로) 다시, 계속해서, 이어지는 연속 라인에서. 이것이
기본 동작.
-fdiagnostics-show-location=모든 줄
줄 바꿈 모드에서만 의미가 있습니다. 진단 메시지 보고자에게 다음을 지시합니다.
결과적으로 물리적 라인에 대해 동일한 소스 위치 정보(접두사로)를 내보냅니다.
한 줄에 담기에는 너무 긴 메시지를 깨는 과정에서.
-fdiagnostics-색상[=WHEN]
-fno-진단-색상
진단에 색상을 사용합니다. WHEN is 못, 항상및 자동. 기본값은 방법에 따라 다릅니다.
컴파일러가 구성되었으며 위의 중 하나일 수 있습니다. WHEN 옵션 또는 또한
못 if GCC_COLORS 환경 변수가 환경에 존재하지 않으며, 자동
그렇지 않으면. 자동 표준오차가 단말일 때만 색을 사용하는 것을 의미한다. NS
양식 -fdiagnostics-색상 and -fno-진단-색상 에 대한 별칭입니다.
-fdiagnostics-color=항상 and -fdiagnostics-color=절대각각.
색상은 환경 변수에 의해 정의됩니다. GCC_COLORS. 그 값은 콜론-
분리된 기능 목록 및 SGR(그래픽 변환 선택) 하위 문자열. SGR
명령은 터미널 또는 터미널 에뮬레이터에 의해 해석됩니다. (섹션 참조
허용된 값과 그 의미에 대한 텍스트 터미널 문서
문자 속성.) 이 하위 문자열 값은 XNUMX진수 표현의 정수입니다.
세미콜론으로 연결할 수 있습니다. 연결할 공통 값은 다음과 같습니다. 1 for
굵게, 4 밑줄, 5 깜박임을 위해, 7 역의 경우, 39 기본 전경색의 경우 30
에 37 전경색의 경우 90 에 97 16색 모드 전경색의 경우 38, 5, 0 에
38, 5, 255 88색 및 256색 모드 전경색, 49 기본 배경
색, 40 에 47 배경색의 경우, 100 에 107 16색 모드 배경색의 경우
and 48, 5, 0 에 48, 5, 255 88색 및 256색 모드 배경색용.
기본값은 GCC_COLORS is
error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01
어디에 01; 31 대담한 빨강, 01; 35 굵은 마젠타색이며, 01; 36 굵은 청록색, 01; 32 대담하다
녹색과 01 굵다. 환경 GCC_COLORS 빈 문자열은 색상을 비활성화합니다.
지원되는 기능은 다음과 같습니다.
"오류="
오류에 대한 SGR 하위 문자열: 마커.
"경고="
경고에 대한 SGR 하위 문자열: 마커.
"참고="
참고에 대한 SGR 하위 문자열: 마커.
"캐럿="
캐럿 라인에 대한 SGR 하위 문자열.
"궤적="
위치 정보에 대한 SGR 하위 문자열, 파일:선 or 파일:선:열 등
"인용="
따옴표 안에 인쇄된 정보에 대한 SGR 하위 문자열입니다.
-fno-진단-쇼-옵션
기본적으로 내보낸 각 진단에는 명령줄 옵션을 나타내는 텍스트가 포함됩니다.
진단을 직접 제어하는 (이러한 옵션이 진단에 알려진 경우)
기계). 지정 -fno-진단-쇼-옵션 깃발은 그것을 억제한다
행동.
-fno-diagnostics-show-caret
기본적으로 내보낸 각 진단에는 원본 소스 줄과 캐럿 '^'이 포함됩니다.
열을 나타냅니다. 이 옵션은 이 정보를 표시하지 않습니다. 소스 라인은
잘린 n 문자인 경우 -f메시지-길이=n 옵션이 주어집니다. 출력할 때
터미널에 수행되는 경우 너비는 다음에서 지정한 너비로 제한됩니다. COLUMNS
환경 변수 또는 설정되지 않은 경우 터미널 너비.
옵션 에 의뢰 or 억제하다 경고
경고는 본질적으로 그렇지 않은 구성을 보고하는 진단 메시지입니다.
오류가 있지만 위험하거나 오류가 있을 수 있음을 암시합니다.
다음 언어 독립적 옵션은 특정 경고를 활성화하지 않고 제어합니다.
GCC에서 생산하는 진단의 종류.
-fsyntax 전용
코드에서 구문 오류를 확인하되 그 이상은 수행하지 마십시오.
-fmax-오류=n
최대 오류 메시지 수를 다음으로 제한합니다. n, 그 시점에서 GCC는 오히려 구제 금융
소스 코드를 계속 처리하려고 시도하는 것보다 만약에 n 0(기본값)입니다.
생성되는 오류 메시지 수에는 제한이 없습니다. 만약에 -Wfatal-오류 또한
지정된 다음 -Wfatal-오류 이 옵션보다 우선합니다.
-w 모든 경고 메시지를 금지합니다.
-워러
모든 경고를 오류로 만듭니다.
-오류=
지정된 경고를 오류로 만듭니다. 경고에 대한 지정자가 추가됩니다.
예를 들면 -Werror=스위치 에 의해 제어되는 경고를 켭니다. -W스위치 오류로.
이 스위치는 부정하는 데 사용되는 부정 형태를 취합니다. -워러 특정 경고의 경우
예를 들면 -Wno-오류=스위치 브랜드 -W스위치 경고는 오류가 아닙니다. -워러
유효합니다.
제어 가능한 각 경고에 대한 경고 메시지에는 다음을 제어하는 옵션이 포함됩니다.
경고. 그런 다음 해당 옵션을 다음과 함께 사용할 수 있습니다. -오류= and - 오류 없음= 설명한대로
위에. (경고 메시지의 옵션 인쇄는 다음을 사용하여 비활성화할 수 있습니다.
-fno-진단-쇼-옵션 깃발.)
지정 -오류=푸 자동으로 암시 -W푸. 그러나, - 오류 없음=푸
아무것도 의미하지 않습니다.
-Wfatal-오류
이 옵션은 컴파일러가 첫 번째 오류가 발생할 때 컴파일을 중단하도록 합니다.
계속해서 추가 오류 메시지를 인쇄하는 대신.
다음으로 시작하는 옵션을 사용하여 많은 특정 경고를 요청할 수 있습니다. -W예를 들어,
- 암묵적 암시적 선언에 대한 경고를 요청합니다. 이러한 각 경고는
옵션은 또한 음수 형태로 시작합니다. -아니- 경고를 끄려면; 예를 들어,
-Wno-암시적. 이 매뉴얼은 두 가지 양식 중 기본값이 아닌 것 중 하나만 나열합니다.
추가 언어별 옵션은 다음을 참조하십시오. C + + 방언 옵션 and 오브젝티브-C
and 목표-C++ 방언 옵션 .
다음과 같은 일부 옵션 -벽 and -웩스트라, 다음과 같은 다른 옵션을 켭니다. - 사용하지 않은, 그
다음과 같은 추가 옵션을 켤 수 있습니다. - 미사용 가치. 긍정적인 효과와
부정적인 형태는 더 구체적인 옵션이 덜 구체적인 옵션보다 우선한다는 것입니다.
명령줄에서의 위치와 무관합니다. 동일한 특이성을 가진 옵션의 경우,
마지막이 적용됩니다. pragma를 통해 활성화 또는 비활성화된 옵션은
명령줄 끝에 나타납니다.
인식할 수 없는 경고 옵션이 요청되는 경우(예: -알 수 없는 경고), GCC는
옵션이 인식되지 않는다는 진단입니다. 그러나 만약 -아니- 형태가 사용되며,
동작이 약간 다릅니다. 에 대한 진단이 생성되지 않습니다. -알 수 없는 경고
다른 진단이 생성되지 않는 한. 이를 통해 새로운 -아니- 옵션
오래된 컴파일러를 사용하지만 문제가 발생하면 컴파일러에서 인식할 수 없는
옵션이 있습니다.
-Wpedantic
-페단 틱
엄격한 ISO C 및 ISO C++에서 요구하는 모든 경고를 발행합니다. 모든 프로그램을 거부
금지된 확장 및 ISO C 및 ISO를 따르지 않는 기타 프로그램 사용
C++. ISO C의 경우, 모든 규정에서 지정한 ISO C 표준 버전을 따릅니다. -표준
사용된 옵션입니다.
유효한 ISO C 및 ISO C++ 프로그램은 이 옵션을 사용하거나 사용하지 않고 제대로 컴파일해야 합니다.
(드물게 요구되지만 -안시 또는 -표준 필요한 버전을 지정하는 옵션
ISO C). 그러나 이 옵션이 없으면 특정 GNU 확장 및 기존 C 및
C++ 기능도 지원됩니다. 이 옵션을 사용하면 거부됩니다.
-Wpedantic 대체 키워드 사용에 대한 경고 메시지를 표시하지 않습니다.
로 시작하고 끝나는 이름 __. 식에서 Pedantic 경고도 비활성화됩니다.
"__extension__" 다음에 나옵니다. 그러나 시스템 헤더 파일만 이 파일을 사용해야 합니다.
탈출 경로; 응용 프로그램은 이를 피해야 합니다.
일부 사용자는 사용하려고 -Wpedantic 엄격한 ISO C 준수를 위해 프로그램을 확인합니다. 그들
곧 그들이 원하는 대로 하지 않는다는 것을 알게 됩니다. 일부 비 ISO 관행을 찾습니다.
그러나 모두는 아닙니다. ISO C 필요 진단 및 기타
어떤 진단이 추가되었습니다.
ISO C 준수 실패를 보고하는 기능은 경우에 따라 유용할 수 있습니다.
그러나 상당한 추가 작업이 필요하며
-Wpedantic. 가까운 시일 내에 이러한 기능을 지원할 계획이 없습니다.
로 지정된 표준 -표준 다음과 같은 C의 GNU 확장 방언을 나타냅니다.
gnu90 or gnu99, 해당하는 기지 품질 , ISO C 버전
GNU 확장 방언을 기반으로 합니다. 경고 -Wpedantic 그들이 있는 곳에 주어진다
기본 표준에 의해 요구됩니다. (그런 경고를 하는 것은 말이 안 된다.
정의에 의해 GNU이기 때문에 지정된 GNU C 방언에 없는 기능에 대해서만
C의 방언에는 컴파일러가 주어진 옵션으로 지원하는 모든 기능이 포함됩니다.
경고할 사항이 없습니다.)
- 현학적 오류
오류가 발생할 때마다 기지 품질 (참조 -Wpedantic) 진단이 필요합니다.
컴파일 타임에 정의되지 않은 동작이 있는 경우와 다른 경우
표준에 따라 유효한 프로그램의 컴파일을 방해하지 않습니다.
이것은 동등하지 않습니다 -Werror = 현학적, 이에 의해 활성화된 오류가 있으므로
옵션이며 후자는 활성화되지 않으며 그 반대의 경우도 마찬가지입니다.
-벽
이것은 일부 사용자가 고려하는 구성에 대한 모든 경고를 활성화합니다.
의심스러운 경우에도 피하기(또는 경고를 방지하기 위해 수정)하기 쉽습니다.
매크로와 결합. 이것은 또한 설명된 일부 언어별 경고를 활성화합니다.
in C + + 방언 옵션 and 오브젝티브-C and 목표-C++ 방언 옵션 .
-벽 다음 경고 플래그를 켭니다.
-워드레스 -전쟁 범위=1 (만 -O2) -Wc++11-호환 -Wc++14-호환
-Wchar-첨자 -Wenum-비교 (C/ObjC에서, C++에서는 기본적으로 켜져 있음)
- 암묵적 정수 (C 및 Objective-C만 해당) -암시적 함수 선언 (C와
오브젝티브-C 전용) -댓글 -W포맷 -W메인 (C/ObjC에만 해당하며
-프리스탠딩) -W아마도 초기화되지 않음 -Wmissing-중괄호 (C/ObjC만 해당) -Wnonnull
-Wopenmp-simd -괄호 -Wpointer 기호 - Wreorder -Wreturn형 -W시퀀스 포인트
-Wsign-비교 (C++에서만) -Wstrict-앨리어싱 -Wstrict-overflow=1 -W스위치
-저서 -초기화되지 않음 -Wunknown-pragma - 사용하지 않는 기능 -사용하지 않은 라벨
- 미사용 가치 - 사용하지 않은 변수 -W휘발성 레지스터 변수
일부 경고 플래그는 -벽. 그들 중 일부는 경고합니다.
사용자가 일반적으로 의심스럽다고 생각하지 않는 구성
때때로 확인하고 싶을 수도 있습니다. 다른 사람들은 건설에 대해 경고합니다.
경우에 따라 필요하거나 피하기 어렵고 수정하는 간단한 방법이 없습니다.
경고를 표시하지 않는 코드입니다. 그들 중 일부는 -웩스트라 그러나 그들 중 많은
개별적으로 활성화해야 합니다.
-웩스트라
이렇게 하면 활성화되지 않은 몇 가지 추가 경고 플래그가 활성화됩니다. -벽. (이 옵션은
부름 -W. 이전 이름은 계속 지원되지만 새 이름은 더 많습니다.
설명적인.)
-클로버드 - 멍한 몸 -무시 예선 -Wmissing-field-initializers
-Wmissing-매개변수 유형 (C만) -Wold 스타일 선언 (C만) -Woverride 초기화
-Wsign-비교 -W 유형 제한 -초기화되지 않음 -Wunused-매개변수 (만 - 사용하지 않은 or
-벽) -사용하지 않았지만 설정 매개변수 (만 - 사용하지 않은 or -벽)
옵션 -웩스트라 다음과 같은 경우에도 경고 메시지를 인쇄합니다.
* 포인터는 "<", "<=", ">" 또는 ">="를 사용하여 정수 XNUMX과 비교됩니다.
* (C++만 해당) 열거자와 비 열거자는 모두 조건부로 나타납니다.
표현.
* (C++만 해당) 모호한 가상 기반.
* (C++ 전용) "레지스터"로 선언된 배열을 첨자화합니다.
* (C++만 해당) "레지스터"로 선언된 변수의 주소를 사용합니다.
* (C++ 전용) 기본 클래스는 파생 클래스의 복사 생성자에서 초기화되지 않습니다.
-Wchar-첨자
배열 첨자가 "char" 유형이면 경고합니다. 이것은 오류의 일반적인 원인입니다.
프로그래머는 종종 이 유형이 일부 시스템에서 서명된다는 사실을 잊습니다. 이 경고는
활성화 된 -벽.
-댓글
주석 시작 시퀀스 때마다 경고 /* 에 나타납니다 /* 댓글 또는 언제든지
백슬래시-개행 문자가 // 논평. 이 경고는 다음에 의해 활성화됩니다. -벽.
- Wno-coverage-mismatch
사용 시 피드백 프로필이 일치하지 않으면 경고 -fprofile-사용 옵션. 만약
소스 파일은 컴파일 사이에 변경됩니다. -fprofile-gen 와 함께 -fprofile-사용,
프로필 피드백이 있는 파일은 소스 파일과 일치하지 않을 수 있으며 GCC는
프로필 피드백 정보를 사용하십시오. 기본적으로 이 경고는 활성화되어 있으며
오류로 처리됩니다. - Wno-coverage-mismatch 경고를 비활성화하거나
-Wno-error=범위 불일치 오류를 비활성화하는 데 사용할 수 있습니다. 오류 비활성화
이 경고의 경우 코드가 제대로 최적화되지 않을 수 있으며 다음과 같은 경우에만 유용합니다.
기존 코드 기반에 대한 버그 수정과 같은 아주 사소한 변경. 완전히 비활성화
경고는 권장되지 않습니다.
-Wno-cpp
(C, Objective-C, C++, Objective-C++ 및 Fortran만 해당)
"#warning" 지시문에서 발생하는 경고 메시지를 억제합니다.
-W더블 프로모션 (C, C++, Objective-C 및 Objective-C++만 해당)
"float" 유형의 값이 암시적으로 "double"로 승격되면 경고를 표시합니다. CPU
32비트 "단정밀도" 부동 소수점 단위로 하드웨어에서 "부동" 구현,
그러나 소프트웨어에서 "이중"을 에뮬레이트하십시오. 그러한 기계에서 다음을 사용하여 계산을 수행합니다.
"이중" 값은 소프트웨어에 필요한 오버헤드 때문에 훨씬 더 비쌉니다.
에뮬레이션.
부동 소수점 때문에 실수로 "double"을 사용하여 계산을 수행하기 쉽습니다.
리터럴은 암시적으로 "double" 유형입니다. 예를 들어:
플로트 면적(플로트 반경)
{
반환 3.14159 * 반지름 * 반지름;
}
컴파일러는 부동 소수점 때문에 "double"로 전체 계산을 수행합니다.
리터럴은 "더블"입니다.
-W포맷
-W형식=n
"printf" 및 "scanf" 등에 대한 호출을 확인하여 제공된 인수가
지정된 형식 문자열에 적합한 유형이 있고 변환이
형식 문자열에 지정된 것은 의미가 있습니다. 여기에는 표준 기능이 포함되며,
"printf", "scanf", "strftime" 및
"strfmon"(C 표준이 아닌 X/Open 확장) 제품군(또는 기타 대상-
특정 가족). 형식 속성 없이 검사되는 기능
지정된 표준 버전 및 이러한 기능 검사에 따라 다릅니다.
속성을 지정하지 않으면 다음으로 비활성화됩니다. -프리스탠딩 or -fno 내장.
형식은 GNU libc 버전 2.2에서 지원하는 형식 기능과 비교하여 확인됩니다.
여기에는 모든 ISO C90 및 C99 기능과 Single Unix의 기능이 포함됩니다.
사양 및 일부 BSD 및 GNU 확장. 다른 라이브러리 구현은
이 모든 기능을 지원합니다. GCC는 그 이상의 기능에 대한 경고를 지원하지 않습니다.
특정 라이브러리의 한계. 그러나 만약 -Wpedantic 와 함께 사용됩니다 -W포맷,
선택한 표준 버전에 없는 형식 기능에 대한 경고가 표시됩니다(그러나
"strfmon" 형식의 경우 C 표준의 어떤 버전에도 없기 때문입니다.
-W형식=1
-W포맷
선택권 -W포맷 에 해당하는 -W형식=1및 -Wno 형식 에 해당하는
-W형식=0. 이후 -W포맷 또한 여러 항목에 대해 null 형식 인수를 확인합니다.
기능, -W포맷 또한 의미 -Wnonnull. 이 수준의 형식의 일부 측면
다음 옵션으로 검사를 비활성화할 수 있습니다. -Wno-포맷-포함-nul,
-Wno-format-extra-args및 -Wno 형식 XNUMX 길이. -W포맷 에 의해 활성화됩니다.
-벽.
-Wno-포맷-포함-nul
If -W포맷 지정된 경우 NUL 바이트를 포함하는 형식 문자열에 대해 경고하지 마십시오.
-Wno-format-extra-args
If -W포맷 "printf"에 대한 초과 인수에 대해 경고하지 않거나
"scanf" 형식 기능. C 표준은 그러한 인수가
무시되었습니다.
사용되지 않은 인수가 다음으로 지정된 사용된 인수 사이에 있는 경우 $
피연산자 번호 사양, 일반적으로 경고는 여전히 제공됩니다.
구현에서 사용하지 않는 항목을 건너뛰기 위해 "va_arg"에 전달할 유형을 알 수 없습니다.
인수. 그러나 "scanf" 형식의 경우 이 옵션은
Single Unix 이후로 사용하지 않은 인수가 모두 포인터인 경우 경고
사양에는 이러한 사용되지 않는 인수가 허용된다고 나와 있습니다.
-Wno 형식 XNUMX 길이
If -W포맷 지정된 경우 길이가 XNUMX인 형식에 대해 경고하지 않습니다. C 표준
길이가 XNUMX인 형식이 허용되도록 지정합니다.
-W형식=2
사용 -W포맷 추가 형식 검사. 현재 동등 -W포맷
-Wformat-비리터럴 -Wformat 보안 -Wformat-y2k.
-Wformat-비리터럴
If -W포맷 형식 문자열이 문자열 리터럴이 아닌 경우에도 경고합니다.
따라서 형식 함수가 형식 인수를 다음과 같이 취하지 않는 한 확인할 수 없습니다.
"va_list".
-Wformat 보안
If -W포맷 가 지정되고 다음을 나타내는 형식 함수의 사용에 대해서도 경고합니다.
가능한 보안 문제. 현재 이것은 "printf" 호출에 대해 경고하고
형식 문자열이 문자열 리터럴이 아니고 형식 문자열이 없는 "scanf" 함수
"printf (foo);"에서와 같이 형식 인수. 다음과 같은 경우 보안 구멍이 될 수 있습니다.
형식 문자열은 신뢰할 수 없는 입력에서 왔으며 다음을 포함합니다. %n. (이것은 현재
무엇의 하위 집합 -Wformat-비리터럴 에 대해 경고하지만 향후 경고는
추가 -Wformat 보안 에 포함되지 않은 -Wformat-비리터럴.)
-Wformat 서명
If -W포맷 형식 문자열에 서명되지 않은 문자열이 필요한 경우에도 경고합니다.
인수와 인수가 서명되고 그 반대의 경우도 마찬가지입니다.
참고: Ubuntu 8.10 이상 버전에서는 이 옵션이 기본적으로 C에 대해 활성화되어 있습니다.
C++, ObjC, ObjC++. 비활성화하려면 다음을 사용하십시오. - Wno 형식 보안, 또는 모든 형식 비활성화
경고 -W형식=0. 형식 보안 경고를 치명적으로 만들려면 다음을 지정하십시오.
-Werror=형식 보안.
-Wformat-y2k
If -W포맷 가 지정되고 "strftime" 형식에 대해서만 경고합니다.
두 자리 연도.
-Wnonnull
null이 아닌 값이 필요한 것으로 표시된 인수에 대해 null 포인터를 전달하는 것에 대해 경고합니다.
"nonnull" 함수 속성에 의해.
-Wnonnull 에 포함 -벽 and -W포맷. 로 비활성화할 수 있습니다. -Wno-null
옵션을 선택합니다.
-윈트셀프 (C, C++, Objective-C 및 Objective-C++만 해당)
스스로 초기화되는 초기화되지 않은 변수에 대해 경고합니다. 참고하세요
옵션은 다음과 함께만 사용할 수 있습니다. -초기화되지 않음 옵션을 선택합니다.
예를 들어 GCC는 다음 스니펫에서만 "i"가 초기화되지 않은 것에 대해 경고합니다.
언제 -윈트셀프 지정되었습니다:
정수 f()
{
정수 나는 = 나는;
반환 i;
}
이 경고는 다음에 의해 활성화됩니다. -벽 C ++에서.
- 암묵적 정수 (C 및 Objective-C만 해당)
선언에서 유형을 지정하지 않으면 경고합니다. 이 경고는 다음에 의해 활성화됩니다. -벽.
-암시적 함수 선언 (C 및 Objective-C만 해당)
함수를 선언하기 전에 사용할 때마다 경고를 제공합니다. C99 모드에서
(-표준=c99 or -std=gnu99), 이 경고는 기본적으로 활성화되어 있으며
오류 - 현학적 오류. 이 경고는 다음에 의해서도 활성화됩니다. -벽.
- 암묵적 (C 및 Objective-C만 해당)
과 동일 - 암묵적 정수 and -암시적 함수 선언. 이 경고가 활성화되었습니다.
by -벽.
-무시 예선 (C 및 C++만 해당)
함수의 반환 유형에 "const"와 같은 유형 한정자가 있으면 경고합니다. ISO C의 경우
이러한 유형 한정자는 영향을 미치지 않습니다. 함수에서 반환된 값이
값 C++의 경우 경고는 스칼라 유형 또는 "void"에 대해서만 발생합니다. ISO C
함수 정의에서 정규화된 "void" 반환 유형을 금지하므로 그러한 반환 유형
이 옵션이 없어도 항상 경고를 받습니다.
이 경고는 다음에 의해서도 활성화됩니다. -웩스트라.
-W메인
"main" 유형이 의심스러운 경우 경고합니다. "main"은 외부 기능이 있어야 합니다.
연결, int 반환, XNUMX개의 인수, XNUMX개 또는 XNUMX개의 인수 사용
적절한 유형. 이 경고는 C++에서 기본적으로 활성화되어 있으며 다음 중 하나에 의해 활성화됩니다.
-벽 or -Wpedantic.
-Wmissing-중괄호
집계 또는 공용체 이니셜라이저가 완전히 대괄호로 묶이지 않은 경우 경고합니다. 다음에서
예를 들어 "a"에 대한 이니셜라이저는 완전히 대괄호로 묶이지 않았지만 "b"에 대한 이니셜라이저는 완전히
괄호로 묶인 이 경고는 다음에 의해 활성화됩니다. -벽 C.
정수 a[2][2] = { 0, 1, 2, 3 };
정수 b[2][2] = { { 0, 1 }, { 2, 3 } };
이 경고는 다음에 의해 활성화됩니다. -벽.
- 포함 디렉토리 누락 (C, C++, Objective-C 및 Objective-C++만 해당)
사용자 제공 포함 디렉토리가 없으면 경고합니다.
-괄호
괄호가 있는 경우와 같이 특정 컨텍스트에서 괄호가 생략되면 경고합니다.
진리값이 예상되는 컨텍스트 또는 연산자가 중첩된 경우 할당
사람들이 종종 혼동하는 우선 순위.
또한 "x<=y<=z"와 같은 비교가 나타나면 경고합니다. 이것은 "(x<=y ? 1 :
0) <= z", 일반적인 수학의 해석과 다른 해석
표기법.
또한 "if" 문과 혼동될 수 있는 구성에 대해 경고합니다.
"else" 분기가 속합니다. 다음은 그러한 경우의 예입니다.
{
만약)
만약 (ㄴ)
푸();
그렇지 않으면
술집 ();
}
C/C++에서 모든 "else" 분기는 가장 안쪽에 있는 "if" 문에 속합니다.
이 예에서는 "if (b)"입니다. 이것은 종종 프로그래머가 기대한 것이 아닙니다.
위의 예에서 프로그래머가 선택한 들여쓰기로 설명했습니다. 있을 때
이러한 혼동의 가능성이 있으므로 GCC는 이 플래그가 지정될 때 경고를 발행합니다.
경고를 제거하려면 가장 안쪽의 "if" 문 주위에 명시적 중괄호를 추가하여
"else"가 둘러싸는 "if"에 속할 수 있는 방법은 없습니다. 결과 코드는 다음과 같습니다.
이렇게 :
{
만약)
{
만약 (ㄴ)
푸();
그렇지 않으면
술집 ();
}
}
중간 피연산자가 생략된 "?:"에 대한 GNU 확장의 위험한 사용에 대해서도 경고합니다.
"?": 연산자의 조건이 부울 표현식인 경우 생략된 값은
항상 1. 종종 프로그래머는 조건부 내부에서 계산된 값을 기대합니다.
대신 표현.
이 경고는 다음에 의해 활성화됩니다. -벽.
-W시퀀스 포인트
시퀀스 위반으로 인해 의미가 정의되지 않은 코드에 대해 경고합니다.
C 및 C++ 표준의 포인트 규칙.
C 및 C++ 표준은 C/C++ 프로그램에서 표현식의 순서를 정의합니다.
의 관점에서 평가 순서 전철기, 사이의 부분적 순서를 나타냅니다.
프로그램 부분의 실행: 시퀀스 포인트 이전에 실행된 부분,
이후에 실행됨. 이것은 완전한 표현의 평가 후에 발생합니다(하나는
더 큰 표현식의 일부가 아님)의 첫 번째 피연산자를 평가한 후
"&&", "||", "? :" 또는 ","(쉼표) 연산자, 함수가 호출되기 전(그러나 후에
인수의 평가 및 호출된 함수를 나타내는 표현식),
특정 다른 장소. 시퀀스 포인트 규칙으로 표현된 것 이외의 순서는
표현식의 하위 표현식 평가가 지정되지 않았습니다. 이 모든 규칙
예를 들어,
함수는 사이에 시퀀스 포인트 없이 하나의 표현식 내에서 호출됩니다.
함수가 호출되는 순서는 지정되지 않습니다. 다만, 기준
위원회는 함수 호출이 겹치지 않는다고 결정했습니다.
시퀀스 포인트 사이에서 값이 수정될 때 지정되지 않습니다.
개체가 적용됩니다. 이것에 의존하는 동작을 갖는 프로그램은 정의되지 않은 동작을 가집니다.
C 및 C++ 표준은 "이전 시퀀스 포인트와 다음 시퀀스 포인트 사이
객체는 다음 평가에 의해 최대 한 번 수정된 저장된 값을 갖습니다.
표현. 또한 이전 값은 다음 값을 결정하기 위해서만 읽어야 합니다.
저장됩니다." 프로그램이 이러한 규칙을 위반하면 특정
구현은 완전히 예측할 수 없습니다.
정의되지 않은 동작이 있는 코드의 예는 "a = a++;", "a[n] = b[n++]" 및 "a[i++] =
i;". 좀 더 복잡한 경우는 이 옵션으로 진단되지 않으며 다음을 제공할 수 있습니다.
가끔 위양성 결과가 나오지만 일반적으로 상당히 효과적인 것으로 밝혀졌습니다.
프로그램에서 이러한 종류의 문제를 감지합니다.
이 표준은 혼란스럽게 표현되어 있으므로 정확한
미묘한 경우 시퀀스 포인트 규칙의 의미. 토론에 대한 링크
제안된 형식적 정의를 포함한 문제는 GCC 읽기 페이지에서 찾을 수 있습니다.
...에서http://gcc.gnu.org/readings.html>.
이 경고는 다음에 의해 활성화됩니다. -벽 C 및 C++용.
-Wno-return-local-addr
다음으로 가는 변수에 대한 포인터(또는 C++에서는 참조)를 반환하는 것에 대해 경고하지 마십시오.
함수가 반환된 후 범위를 벗어났습니다.
-Wreturn형
함수가 기본적으로 "int"인 반환 유형으로 정의될 때마다 경고합니다. 또한
반환 유형이 있는 함수에서 반환 값이 없는 "반환" 문에 대해 경고합니다.
"무효"가 아닙니다(함수 본문의 끝에서 떨어지는 것은 반환되는 것으로 간주됩니다.
값 없음) 및 함수의 표현식이 있는 "반환" 문에 대해
반환 유형이 "void"입니다.
C++의 경우 반환 유형이 없는 함수는 항상 진단 메시지를 생성합니다.
언제 - 노리턴형 지정됩니다. 유일한 예외는 "메인"과 기능입니다.
시스템 헤더에 정의되어 있습니다.
이 경고는 다음에 의해 활성화됩니다. -벽.
-Wshift-count-음수
교대 횟수가 음수이면 경고합니다. 이 경고는 기본적으로 활성화되어 있습니다.
-Wshift-count-overflow
시프트 횟수 >= 유형 너비인 경우 경고합니다. 이 경고는 기본적으로 활성화되어 있습니다.
-W스위치
"switch" 문에 열거형 인덱스가 있고 "case"가 부족할 때마다 경고합니다.
해당 열거의 명명된 코드 중 하나 이상에 대해 ("기본값"의 존재
레이블은 이 경고를 방지합니다.) 열거형 범위를 벗어난 "케이스" 레이블도
이 옵션을 사용하면 경고를 유발합니다("기본" 레이블이 있더라도). 이것
경고가 활성화됨 -벽.
-Wswitch-기본값
"switch" 문에 "default" 대소문자가 없을 때마다 경고합니다.
-Wswitch 열거 형
"switch" 문에 열거형 인덱스가 있고 "case"가 부족할 때마다 경고합니다.
해당 열거의 명명된 코드 중 하나 이상에 대해 "케이스" 라벨 외부
열거형 범위는 이 옵션을 사용할 때도 경고를 표시합니다. 유일한 차이점
사이에 -W스위치 이 옵션은 이 옵션이 생략된 것에 대한 경고를 제공한다는 것입니다.
"기본" 레이블이 있더라도 열거 코드.
-Wswitch-부울
"switch" 문에 부울 유형의 인덱스가 있을 때마다 경고합니다. 가능하다
제어 표현식을 다른 유형으로 캐스팅하여 이 경고를 표시하지 않습니다.
"볼". 예를 들어:
스위치 ((int) (a == 4))
{
...
}
이 경고는 C 및 C++ 프로그램에 대해 기본적으로 활성화되어 있습니다.
-Wsync-낸드 (C 및 C++만 해당)
"__sync_fetch_and_nand" 및 "__sync_nand_and_fetch" 내장 함수가 다음과 같을 때 경고합니다.
사용 된. 이러한 함수는 GCC 4.4에서 의미 체계를 변경했습니다.
-저서
프로그램의 의미를 변경할 수 있는 trigraph가 발견되면 경고합니다.
(코멘트 내의 trigraphs는 경고되지 않습니다). 이 경고는 다음에 의해 활성화됩니다. -벽.
-사용하지 않았지만 설정 매개변수
함수 매개변수가 할당되었지만 그렇지 않으면 사용되지 않을 때마다 경고합니다.
선언).
이 경고를 표시하지 않으려면 "unused" 속성을 사용하십시오.
이 경고는 다음에 의해서도 활성화됩니다. - 사용하지 않은 와 함께 -웩스트라.
-사용하지 않았지만 설정 변수
지역 변수가 할당되었지만 그렇지 않으면 사용되지 않을 때마다 경고합니다.
선언). 이 경고는 다음에 의해 활성화됩니다. -벽.
이 경고를 표시하지 않으려면 "unused" 속성을 사용하십시오.
이 경고는 다음에 의해서도 활성화됩니다. - 사용하지 않은에 의해 활성화됩니다. -벽.
- 사용하지 않는 기능
정적 함수가 선언되었지만 정의되지 않았거나 인라인이 아닌 정적 함수가 선언될 때마다 경고합니다.
기능을 사용하지 않습니다. 이 경고는 다음에 의해 활성화됩니다. -벽.
-사용하지 않은 라벨
레이블이 선언되었지만 사용되지 않을 때마다 경고합니다. 이 경고는 다음에 의해 활성화됩니다. -벽.
이 경고를 표시하지 않으려면 "unused" 속성을 사용하십시오.
-Wunused-local-typedefs (C, Objective-C, C++ 및 Objective-C++만 해당)
함수에 로컬로 정의된 typedef가 사용되지 않을 때 경고합니다. 이 경고는
활성화 된 -벽.
-Wunused-매개변수
함수 매개변수가 선언 외에 사용되지 않을 때마다 경고합니다.
이 경고를 표시하지 않으려면 "unused" 속성을 사용하십시오.
- 사용하지 않은 결과 없음
"warn_unused_result" 속성으로 표시된 함수의 호출자가 다음을 수행하는 경우 경고하지 마십시오.
반환 값을 사용하지 마십시오. 기본값은 -Wunused-결과.
- 사용하지 않은 변수
지역 변수 또는 상수가 아닌 정적 변수가 다음을 제외하고 사용되지 않을 때마다 경고합니다.
그 선언. 이 경고는 다음에 의해 활성화됩니다. -벽.
이 경고를 표시하지 않으려면 "unused" 속성을 사용하십시오.
- 미사용 가치
문이 명시적으로 사용되지 않은 결과를 계산할 때마다 경고합니다. 억제하다
이 경고는 사용되지 않은 표현식을 "void"로 변환합니다. 여기에는 표현이 포함됩니다.
구문 또는 부작용이 없는 쉼표 표현식의 왼쪽.
예를 들어 "x[i,j]"와 같은 표현식은 경고를 발생시키는 반면 "x[(void)i,j]"는
하지 않습니다.
이 경고는 다음에 의해 활성화됩니다. -벽.
- 사용하지 않은
모든것 위에 - 사용하지 않은 옵션이 결합되었습니다.
사용하지 않는 함수 매개변수에 대한 경고를 받으려면 다음 중 하나를 지정해야 합니다.
-웩스트라 - 사용하지 않은 (참고 -벽 의미하다 - 사용하지 않은) 또는 별도로 지정
-Wunused-매개변수.
-초기화되지 않음
자동 변수가 먼저 초기화되지 않고 사용되거나 변수가
"setjmp" 호출에 의해 방해될 수 있습니다. C++에서 비정적 참조 또는 비정적 참조인 경우 경고
정적 "const" 멤버는 생성자가 없는 클래스에 나타납니다.
초기화되지 않은 변수 값을 사용하는 코드에 대해 경고하려면
자체 이니셜라이저를 사용하여 -윈트셀프 옵션을 선택합니다.
이러한 경고는 구조의 초기화되지 않았거나 막힌 개별 요소에 대해 발생합니다.
초기화되지 않았거나 클로버된 변수뿐만 아니라 통합 또는 배열 변수
전체적으로. "휘발성"으로 선언된 변수나 요소에는 발생하지 않습니다. 때문에
이러한 경고는 최적화, 정확한 변수 또는 요소에 따라 다릅니다.
경고는 정확한 최적화 옵션과 사용된 GCC 버전에 따라 다릅니다.
계산에만 사용되는 변수에 대한 경고가 없을 수 있습니다.
데이터 흐름에 의해 이러한 계산이 삭제될 수 있으므로 자체적으로 사용되지 않는 값
경고가 인쇄되기 전에 분석합니다.
-W아마도 초기화되지 않음
자동 변수의 경우 함수 항목에서 다음을 사용하는 경로가 있는 경우
초기화된 변수이지만 다른 경로가 존재합니다.
변수가 초기화되지 않은 경우 컴파일러는 증명할 수 없는 경우 경고를 내보냅니다.
초기화되지 않은 경로는 런타임에 실행되지 않습니다. 이러한 경고는 선택 사항입니다.
GCC는 코드가 정확할 수 있는 모든 이유를 볼 만큼 충분히 똑똑하지 않기 때문입니다.
오류가 있는 것처럼 보이지만. 이것이 어떻게 일어날 수 있는지에 대한 한 가지 예는 다음과 같습니다.
{
int x;
스위치(y)
{
경우 1: x = 1;
하다;
경우 2: x = 4;
하다;
경우 3: x = 5;
}
푸(x);
}
"y"의 값이 항상 1, 2 또는 3이면 "x"는 항상 초기화되지만 GCC는
이것을 모릅니다. 경고를 표시하지 않으려면 다음과 같은 기본 케이스를 제공해야 합니다.
단언하다(0) 또는 유사한 코드.
이 옵션은 또한 비휘발성 자동 변수가
"longjmp"를 호출합니다. 이러한 경고는 최적화에서만 가능합니다.
편집.
컴파일러는 "setjmp"에 대한 호출만 봅니다. "longjmp"가 어디에 있는지 알 수 없습니다.
라고 불리는; 실제로 신호 처리기는 코드의 어느 지점에서나 호출할 수 있습니다. 로
결과적으로 "longjmp" 때문에 실제로 문제가 없는 경우에도 경고를 받을 수 있습니다.
실제로 문제를 일으킬 장소에서 호출할 수 없습니다.
사용하는 모든 함수를 선언하면 일부 가짜 경고를 피할 수 있습니다.
"noreturn"으로 반환하지 마십시오.
이 경고는 다음에 의해 활성화됩니다. -벽 or -웩스트라.
-Wunknown-pragma
GCC에서 이해할 수 없는 "#pragma" 지시문을 만나면 경고합니다. 이 경우
명령줄 옵션이 사용되면 시스템의 알 수 없는 pragma에 대한 경고도 발행됩니다.
헤더 파일. 경고가 -벽
명령줄 옵션.
-Wno-pragma
잘못된 매개변수, 잘못된 구문 또는
프라그마 간의 충돌. 또한보십시오 -Wunknown-pragma.
-Wstrict-앨리어싱
이 옵션은 다음 경우에만 활성화됩니다. -fstrict-앨리어싱 활성. 코드에 대해 경고합니다.
컴파일러가 최적화를 위해 사용하는 엄격한 앨리어싱 규칙을 위반할 수 있습니다.
경고가 모든 경우를 포착하지는 않지만 더 일반적인 경우를 포착하려고 시도합니다.
함정. 에 포함되어 있습니다. -벽. 다음과 같습니다. -Wstrict-앨리어싱=3
-Wstrict-앨리어싱=n
이 옵션은 다음 경우에만 활성화됩니다. -fstrict-앨리어싱 활성. 코드에 대해 경고합니다.
컴파일러가 최적화를 위해 사용하는 엄격한 앨리어싱 규칙을 위반할 수 있습니다.
수준이 높을수록 정확도가 높아집니다(오탐이 적음). 더 높은 수준
또한 방법과 유사하게 더 많은 노력에 해당합니다. -O 작동합니다. -Wstrict-앨리어싱 is
에 해당 -Wstrict-앨리어싱=3.
레벨 1: 가장 공격적이고 빠르며 가장 정확하지 않습니다. 레벨이 높을 때 유용할 수 있음
경고하지 않지만 -fstrict-앨리어싱 false가 거의 없기 때문에 여전히 코드를 중단합니다.
네거티브. 그러나 많은 오탐지가 있습니다. 모든 포인터 변환에 대해 경고합니다.
역참조되지 않더라도 호환되지 않을 수 있는 유형 간에. 앞을 달리다
끝만.
레벨 2: 공격적이고 빠르며 너무 정확하지 않습니다. 여전히 많은 가양성이 있을 수 있습니다(아직
수준 1만큼 많음), 거짓 부정은 거의 없습니다(하지만 수준 1 이상일 수 있음).
레벨 1과 달리 주소를 가져올 때만 경고합니다. 불완전한 유형에 대해 경고합니다.
프런트 엔드에서만 실행됩니다.
레벨 3(기본값 -Wstrict-앨리어싱): 오탐이 거의 없고
거짓 부정. 최적화가 활성화된 경우 레벨 1 또는 2보다 약간 느립니다.
프런트 엔드에서 일반적인 말장난+역참조 패턴을 처리합니다.
"*(int*)&some_float". 최적화가 활성화된 경우 백엔드에서도 실행됩니다.
흐름에 민감한 지점 정보를 사용하여 여러 명령문 사례를 처리합니다.
변환된 포인터가 역참조될 때만 경고합니다. 불완전에 대해 경고하지 않음
유형.
-Wstrict 오버플로
-Wstrict-오버플로=n
이 옵션은 다음 경우에만 활성화됩니다. -fstrict-오버플로 활성. 경우에 대해 경고합니다.
여기서 컴파일러는 부호 있는 오버플로가 실행되지 않는다는 가정을 기반으로 최적화합니다.
발생하다. 코드가 오버플로될 수 있는 모든 경우에 대해 경고하는 것은 아닙니다.
컴파일러가 일부 최적화를 구현하는 경우에만 경고합니다. 따라서 이
경고는 최적화 수준에 따라 다릅니다.
부호 있는 오버플로가 발생하지 않는다고 가정하는 최적화는 다음과 같은 경우 완벽하게 안전합니다.
관련된 변수의 값은 오버플로가 실제로 발생하지 않는 값입니다.
발생하다. 따라서 이 경고는 쉽게 가양성을 줄 수 있습니다. 코드에 대한 경고
그것은 실제로 문제가 아닙니다. 중요한 문제에 집중할 수 있도록 몇 가지 경고
수준이 정의됩니다. 정의되지 않은 서명된 오버플로 사용에 대한 경고가 발행되지 않습니다.
루프에 필요한 반복 횟수를 추정할 때, 특히 결정할 때
루프가 전혀 실행되는지 여부.
-Wstrict-overflow=1
의심스럽고 피하기 쉬운 사례에 대해 경고합니다. 예를 들어,
-fstrict-오버플로, 컴파일러는 "x + 1 > x"를 1로 단순화합니다.
-Wstrict 오버플로 에 의해 활성화됩니다. -벽; 더 높은 수준은 그렇지 않으며 반드시 있어야 합니다.
명시적으로 요청했습니다.
-Wstrict-overflow=2
또한 비교가 상수로 단순화된 다른 경우에 대해서도 경고합니다. 을위한
예: "abs(x) >= 0". 다음 경우에만 단순화할 수 있습니다. -fstrict-오버플로 에
"abs (INT_MIN)"가 XNUMX보다 작은 "INT_MIN"으로 오버플로되기 때문입니다.
-Wstrict 오버플로 (레벨 없음)은 다음과 같습니다. -Wstrict-overflow=2.
-Wstrict-overflow=3
또한 비교가 단순화된 다른 경우에 대해서도 경고합니다. 예: "x + 1
> 1"은 "x > 0"으로 단순화됩니다.
-Wstrict-overflow=4
또한 위의 경우에 포함되지 않은 다른 단순화에 대해 경고합니다. 을위한
예: "(x * 10) / 5"는 "x * 2"로 단순화됩니다.
-Wstrict-overflow=5
또한 컴파일러가 상수의 크기를 줄이는 경우에 대해 경고합니다.
비교에 참여했습니다. 예: "x + 2 > y"는 "x + 1 >= y"로 단순화됩니다.
이것은 단순화하기 때문에 가장 높은 경고 수준에서만 보고됩니다.
많은 비교에 적용되므로 이 경고 수준은
오 탐지.
-Wsuggest-속성=[순수한|const를|노리턴|체재]
속성을 추가하는 것이 도움이 될 수 있는 경우에 대해 경고합니다. 현재 속성
지원되는 목록은 아래에 나와 있습니다.
-Wsuggest-속성=순수
-Wsuggest-속성=const
-Wsuggest-속성=noreturn
"pure", "const" 또는 속성의 후보가 될 수 있는 함수에 대해 경고합니다.
"노턴". 컴파일러는 다른 컴파일에서 볼 수 있는 함수에 대해서만 경고합니다.
단위 또는 ("순수" 및 "상수"의 경우) 기능이 다음을 증명할 수 없는 경우
정상적으로 반환됩니다. 함수가 무한을 포함하지 않으면 정상적으로 반환됩니다.
던지거나 "중단"을 호출하거나 트래핑하여 비정상적으로 루프 또는 반환합니다. 이 분석
옵션이 필요합니다 -fipa-순수-const, 기본적으로 활성화되어 있습니다. -O 이상.
최적화 수준이 높을수록 분석 정확도가 향상됩니다.
-Wsuggest-속성=형식
-Wmissing 형식 속성
"형식" 속성의 후보가 될 수 있는 함수 포인터에 대해 경고합니다.
이들은 가능한 후보일 뿐 절대적인 후보는 아닙니다. GCC 추측
할당에 사용되는 "형식" 속성이 있는 함수 포인터,
초기화, 매개변수 전달 또는 반환 문에는 해당 항목이 있어야 합니다.
결과 유형의 "형식" 속성. 즉 왼편의
할당 또는 초기화, 매개변수 변수의 유형 또는 반환
포함하는 함수의 유형에는 각각 "형식" 속성도 있어야 합니다.
경고를 피하기 위해.
GCC는 "형식"의 후보가 될 수 있는 함수 정의에 대해서도 경고합니다.
속성. 다시 말하지만, 이들은 가능한 후보일 뿐입니다. GCC는 "형식"을 추측합니다.
속성은 다음과 같은 함수를 호출하는 모든 함수에 적합할 수 있습니다.
"vprintf" 또는 "vscanf"이지만 항상 그런 것은 아니며 일부 기능은
"형식" 속성이 적절한 것은 감지되지 않을 수 있습니다.
-Wsuggest-최종 유형
유형이 다음과 같은 경우 코드 품질이 향상되는 가상 메서드가 있는 유형에 대해 경고
C++11 "최종" 지정자로 선언되었거나 가능한 경우
익명의 네임스페이스 이를 통해 GCC는 다형성을 보다 적극적으로 가상화할 수 있습니다.
전화. 이 경고는 링크 시간 최적화에서 더 효과적입니다.
클래스 계층 그래프에 대한 정보가 더 완벽합니다.
-Wsuggest-최종 방법
메서드가 다음과 같을 경우 코드 품질이 향상되는 가상 메서드에 대해 경고합니다.
C++11 "최종" 지정자로 선언되거나 가능한 경우 해당 유형이 다음에서 선언되었습니다.
익명 네임스페이스 또는 "최종" 지정자를 사용합니다. 이 경고가 더 효과적입니다.
클래스 계층 그래프에 대한 정보가 있는 링크 시간 최적화 사용
더 완전한. 의 제안을 먼저 고려하는 것이 좋습니다.
-Wsuggest-최종 유형 그런 다음 새 주석으로 다시 작성하십시오.
-Wsuggest 재정의
override 키워드로 표시되지 않은 가상 기능 재정의에 대해 경고합니다.
-워레이 경계
-워레이 경계=n
이 옵션은 다음 경우에만 활성화됩니다. -fttree-vrp 활성(기본값 -O2 이상). 그것
항상 범위를 벗어난 배열의 첨자에 대해 경고합니다. 이 경고는
활성화 된 -벽.
-전쟁 범위=1
의 경고 수준입니다. -워레이 경계 에 의해 활성화됩니다. -벽; 더 높은 수준
그렇지 않으며 명시적으로 요청해야 합니다.
-전쟁 범위=2
이 경고 수준은 끝에서 배열에 대한 범위를 벗어난 액세스에 대해서도 경고합니다.
포인터를 통해 액세스되는 배열 및 구조체. 이 경고 수준은
가양성이 더 많으며 기본적으로 비활성화됩니다.
-Wbool-비교
다음과 다른 정수 값과 비교한 부울 표현식에 대해 경고합니다.
"허위 사실". 예를 들어 다음 비교는 항상 거짓입니다.
정수 n = 5;
...
if ((n > 1) == 2) { ... }
이 경고는 다음에 의해 활성화됩니다. -벽.
-폐기되지 않는 한정자 (C 및 Objective-C만 해당)
포인터의 유형 한정자가 삭제되는 경우 경고하지 마십시오. 일반적으로
컴파일러는 "const char *" 변수가 "char
*" 매개변수입니다. 이 옵션을 사용하여 이러한 경고를 표시하지 않을 수 있습니다.
- Wno-discarded-array-qualifiers (C 및 Objective-C만 해당)
포인터 대상인 배열의 유형 한정자가 실행 중인 경우 경고하지 마십시오.
버려진. 일반적으로 컴파일러는 "const int (*)[]" 변수가
"int (*)[]" 매개변수를 사용하는 함수입니다. 이 옵션을 사용하여 억제할 수 있습니다.
그런 경고.
-Wno-호환되지 않는 포인터 유형 (C 및 Objective-C만 해당)
호환되지 않는 유형이 있는 포인터 간에 변환이 있을 때 경고하지 마십시오.
이 경고는 적용되지 않는 경우에 적용됩니다. -Wno 포인터 기호, 포인터에 대해 경고합니다.
서명이 다른 인수 전달 또는 할당.
-Wno-int-변환 (C 및 Objective-C만 해당)
호환되지 않는 정수-포인터 및 포인터-정수 변환에 대해 경고하지 마십시오.
이 경고는 암시적 변환에 대한 것입니다. 명시적 변환의 경우 경고
- 포인터 투 포인터 캐스트 없음 and - Wno-pointer-to-int-cast 사용될 수있다.
-Wno-div-by-XNUMX
XNUMX으로 컴파일 타임 정수 나누기에 대해 경고하지 마십시오. 부동 소수점 나누기
XNUMX은 무한대를 얻는 합법적인 방법이 될 수 있으므로 경고되지 않습니다.
NaN.
-Wsystem 헤더
시스템 헤더 파일에서 발견된 구성에 대한 경고 메시지를 인쇄합니다. 경고
시스템 헤더는 일반적으로 표시되지 않는다는 가정 하에 표시되지 않습니다.
실제 문제를 나타내며 컴파일러 출력을 읽기 어렵게 만듭니다. 사용
이 명령줄 옵션은 시스템 헤더에서 경고를 내보내도록 GCC에 지시합니다.
사용자 코드에서 발생했습니다. 그러나 -벽 이 옵션과 함께
하지 지원 시스템 헤더의 알 수 없는 pragma에 대해 경고 --- 이를 위해, -Wunknown-pragma
또한 사용해야합니다.
- 트램폴린
중첩 함수에 대한 포인터에 대해 생성된 트램폴린에 대해 경고합니다. 트램폴린은
주소를 입력할 때 스택에서 런타임에 생성되는 작은 데이터 또는 코드 조각
중첩된 함수의 를 가져와 간접적으로 중첩된 함수를 호출하는 데 사용됩니다.
일부 대상의 경우 데이터로만 구성되어 특별한 처리가 필요하지 않습니다.
그러나 대부분의 대상은 코드로 구성되어 있으므로 스택을 만들어야 합니다.
프로그램이 제대로 작동하려면 실행 가능합니다.
-Wfloat-같음
부동 소수점 값이 동등 비교에 사용되면 경고합니다.
이 이면의 아이디어는 때때로 (프로그래머에게) 다음을 수행하는 것이 편리하다는 것입니다.
부동 소수점 값을 무한히 정확한 실수에 대한 근사치로 간주합니다.
이 작업을 수행하는 경우 계산해야 합니다(코드를 분석하거나 일부
다른 방법) 계산이 도입하는 최대 또는 가능한 최대 오류, 및
비교를 수행할 때(그리고 출력을 생성할 때 허용하지만 이는
다른 문제). 특히 평등을 테스트하는 대신 다음을 확인해야 합니다.
두 값에 겹치는 범위가 있는지 확인합니다. 그리고 이것은
관계 연산자이므로 같음 비교가 잘못될 수 있습니다.
-전통적인 (C 및 Objective-C만 해당)
기존 및 ISO C에서 다르게 동작하는 특정 구성에 대해 경고합니다. 또한
기존의 C에 해당하는 항목이 없거나 문제가 있는 ISO C 구성에 대해 경고합니다.
피해야 할 구조.
* 매크로 본문의 문자열 리터럴 내에 나타나는 매크로 매개변수. 에
전통적인 C 매크로 교체는 문자열 리터럴 내에서 발생하지만 ISO C에서는
그렇지 않습니다.
* 전통적인 C에서는 일부 전처리기 지시문이 존재하지 않았습니다. 전통적인
전처리기는 다음 경우에만 라인을 지시문으로 간주합니다. # 칼럼에 등장
1 라인에. 그러므로 -전통적인 전통적인 C
이해하지만 무시하기 때문에 # 의 첫 번째 문자로 나타나지 않습니다.
라인. 또한 "#pragma"가 이해하지 못하는 지시문을 숨길 것을 제안합니다.
들여쓰기를 통해 전통적인 C. 일부 기존 구현은
"#elif"를 인식하므로 이 옵션은 완전히 피하는 것이 좋습니다.
* 인수 없이 나타나는 함수와 같은 매크로입니다.
* 단항 더하기 연산자.
* U 정수 상수 접미사 또는 F or L 부동 소수점 상수 접미사.
(전통적인 C는 L 정수 상수의 접미사.)
접미사는 대부분의 최신 시스템의 시스템 헤더에 정의된 매크로에 나타납니다.
예를 들어 _MIN/_MAX "의 매크로 ". 사용자 코드에서 이러한 매크로를 사용하면
일반적으로 가짜 경고로 이어지지만 GCC의 통합 전처리기는
이러한 경우 경고를 피하기에 충분한 컨텍스트입니다.
* 한 블록에서 외부로 선언된 함수는 종료 후 사용
블록.
* "switch" 문에는 "long" 유형의 피연산자가 있습니다.
* "정적"이 아닌 함수 선언은 "정적" 함수 선언 다음에 옵니다. 이 구성은
일부 전통적인 C 컴파일러에서 허용됩니다.
* 정수 상수의 ISO 유형은 너비 또는 부호가 다릅니다.
전통적인 유형. 이 경고는 상수의 밑이 XNUMX인 경우에만 발행됩니다.
즉, 일반적으로 비트 패턴을 나타내는 XNUMX진수 또는 XNUMX진수 값은
에 대해 경고했습니다.
* ISO 문자열 연결 사용이 감지되었습니다.
* 자동 집계의 초기화.
* 식별자가 레이블과 충돌합니다. 전통적인 C에는 별도의 네임스페이스가 없습니다.
라벨.
* 유니온 초기화. 이니셜라이저가 XNUMX이면 경고가 생략됩니다.
이것은 사용자 코드에 XNUMX 초기화가 나타난다는 가정하에 수행됩니다.
초기화 경고 누락을 피하기 위해 예를 들어 "__STDC__"를 조건으로 하고
전통적인 C의 경우 기본 초기화는 XNUMX입니다.
* 고정/부동 소수점 값과 그 반대로 프로토타입에 의한 변환. NS
전통적인 C로 컴파일할 때 이러한 프로토타입이 없으면 심각한 문제가 발생합니다.
문제. 이것은 가능한 전환 경고의 하위 집합입니다. 풀 세트를 위해
사용 -전통 변환.
* ISO C 스타일 기능 정의 사용. 이 경고는 의도적으로 지원 발행
이러한 ISO C 기능 때문에 프로토타입 선언 또는 가변 함수에 대해
libiberty의 전통적인 C 호환성 매크로를 사용할 때 코드에 나타납니다.
"PARAMS" 및 "VPARAMS". 이 경고는 중첩된 함수에 대해서도 무시됩니다.
해당 기능은 이미 GCC 확장이므로 다음과 관련이 없습니다.
전통적인 C 호환성.
-전통 변환 (C 및 Objective-C만 해당)
프로토타입이 발생하는 것과 다른 유형 변환을 일으키는 경우 경고
프로토타입이 없는 경우 동일한 인수에 대해 설명합니다. 여기에는 다음의 전환이 포함됩니다.
고정 소수점을 부동 소수점으로 또는 그 반대로 변환하고 너비를 변경하거나
기본 승격과 동일한 경우를 제외하고 고정 소수점 인수의 부호.
-W선언 후 선언 (C 및 Objective-C만 해당)
블록의 명령문 다음에 선언이 발견되면 경고합니다. 알려진 이 구성은
C++에서 ISO C99와 함께 도입되었으며 기본적으로 GCC에서 허용됩니다. 그렇지 않다
ISO C90에서 지원합니다.
-분데프
정의되지 않은 식별자가 "#if" 지시문에서 평가되면 경고합니다.
-Wno-endif-레이블
"#else" 또는 "#endif" 다음에 텍스트가 올 때마다 경고하지 마십시오.
-W섀도우
지역 변수 또는 유형 선언이 다른 변수에 그림자를 줄 때마다 경고합니다.
매개변수, 유형, 클래스 멤버(C++의 경우) 또는 인스턴스 변수(Objective-C의 경우) 또는
내장 함수가 가려질 때마다. C++에서 컴파일러는 다음과 같은 경우 경고합니다.
지역 변수는 명시적 typedef를 가리지만 구조체/클래스/열거형을 가리는 경우에는 그렇지 않습니다.
-Wno-shadow-ivar (목표-C만 해당)
Objective-C에서 지역 변수가 인스턴스 변수를 가릴 때마다 경고하지 마십시오.
방법.
-보다 큼=렌
다음보다 큰 개체가 있을 때마다 경고 렌 바이트가 정의됩니다.
-Wframe-보다 큼=렌
함수 프레임의 크기가 다음보다 크면 경고 렌 바이트. 계산 완료
스택 프레임 크기를 결정하는 것은 근사치이며 보수적이지 않습니다. 실제
요구 사항은 다음보다 다소 클 수 있습니다. 렌 경고를 받지 못하더라도. 에
또한 "alloca", 가변 길이 배열 또는 관련을 통해 할당된 모든 공간
생성 여부를 결정할 때 컴파일러에서 구문을 포함하지 않습니다.
경고.
-Wno-free-nonheap-객체
힙에 할당되지 않은 개체를 해제하려고 할 때 경고하지 마십시오.
-Wstack 사용=렌
함수의 스택 사용량이 다음보다 클 수 있음을 경고합니다. 렌 바이트. 계산
스택 사용량이 보수적인지 확인하기 위해 수행됩니다. "alloca"를 통해 할당된 모든 공간,
가변 길이 배열 또는 관련 구문은 다음과 같은 경우 컴파일러에 의해 포함됩니다.
경고를 발행할지 여부를 결정합니다.
메시지는 의 출력과 일치합니다. -fstack-사용.
* 스택 사용량이 완전히 정적이지만 지정된 양을 초과하는 경우 다음과 같습니다.
경고: 스택 사용량은 1120바이트입니다.
* 스택 사용량이 (부분적으로) 동적이지만 제한된 경우 다음과 같습니다.
경고: 스택 사용량은 1648바이트일 수 있습니다.
* 스택 사용이 (부분적으로) 동적이고 제한되지 않는 경우 다음과 같습니다.
경고: 스택 사용량이 제한되지 않을 수 있습니다.
-Wunsafe 루프 최적화
컴파일러가 아무 것도 가정할 수 없기 때문에 루프를 최적화할 수 없는 경우 경고합니다.
루프 인덱스의 경계. 와 함께 -펀세이프 루프 최적화 컴파일러의 경우 경고
그런 가정을 합니다.
-Wno-pedantic-ms-형식 (MinGW 대상만 해당)
와 함께 사용시 -W포맷 and -페단 틱 GNU 확장 없이 이것은
옵션은 비 ISO "printf" / "scanf" 형식 너비 지정자에 대한 경고를 비활성화합니다.
"I32", "I64" 및 "I"는 MS 런타임에 따라 달라지는 Windows 대상에서 사용됩니다.
-Wpointer-arith
함수 유형 또는 "무효"의 "크기"에 따라 달라지는 모든 것에 대해 경고합니다. GNU C
"void *"를 사용한 계산의 편의를 위해 이러한 유형의 크기를 1로 지정합니다.
함수에 대한 포인터와 포인터. C++에서는 산술 연산이 수행될 때도 경고합니다.
"NULL"이 포함됩니다. 이 경고는 다음에 의해서도 활성화됩니다. -Wpedantic.
-W 유형 제한
제한된 범위로 인해 비교가 항상 참인지 항상 거짓인지 경고합니다.
데이터 유형이지만 상수 표현식에 대해서는 경고하지 않습니다. 예를 들어, 서명되지 않은 경우 경고
변수는 "<" 또는 ">="를 사용하여 XNUMX과 비교됩니다. 이 경고는 다음에 의해서도 활성화됩니다.
-웩스트라.
-Wbad 함수 캐스트 (C 및 Objective-C만 해당)
함수 호출이 일치하지 않는 유형으로 캐스트될 때 경고합니다. 예를 들어 전화가 오면 경고합니다.
정수 유형을 반환하는 함수는 포인터 유형으로 캐스트됩니다.
-Wc90-c99-호환 (C 및 Objective-C만 해당)
ISO C90에는 없지만 ISO C99에는 있는 기능에 대해 경고합니다. 예를 들어,
가변 길이 배열의 사용에 대해 경고, "long long" 유형, "bool" 유형, 복합
리터럴, 지정된 이니셜라이저 등. 이 옵션은
표준 모드. "__extension__" 뒤에 오는 표현식에서는 경고가 비활성화됩니다.
-Wc99-c11-호환 (C 및 Objective-C만 해당)
ISO C99에는 없지만 ISO C11에는 있는 기능에 대해 경고합니다. 예를 들어,
익명 구조 및 공용체 사용에 대해 경고, "_Atomic" 유형 한정자,
"_Thread_local" 스토리지 클래스 지정자, "_Alignas" 지정자, "Alignof" 연산자,
"_Generic" 키워드 등. 이 옵션은 표준 모드와 무관합니다.
"__extension__" 뒤에 오는 표현식에서는 경고가 비활성화됩니다.
-Wc++-호환 (C 및 Objective-C만 해당)
ISO C 및 ISO의 공통 하위 집합 외부에 있는 ISO C 구성에 대해 경고합니다.
C++, 예를 들어 "void *"에서 "void"가 아닌 포인터로의 암시적 변환 요청
유형.
-Wc++11-호환 (C++ 및 Objective-C++만 해당)
ISO C++ 1998과 ISO C++ 2011에서 의미가 다른 C++ 구문에 대해 경고합니다.
예: ISO C++ 1998의 키워드인 ISO C++ 2011의 식별자. 이 경고
켜다 - 축소 에 의해 활성화됩니다. -벽.
-Wc++14-호환 (C++ 및 Objective-C++만 해당)
ISO C++ 2011과 ISO C++ 2014에서 의미가 다른 C++ 구문에 대해 경고합니다.
이 경고는 다음에 의해 활성화됩니다. -벽.
-Wcast급
대상 유형에서 유형 한정자를 제거하기 위해 포인터가 캐스트될 때마다 경고합니다.
예를 들어 "const char *"가 일반 "char *"로 캐스팅되면 경고합니다.
또한 안전하지 않은 방식으로 형식 한정자를 도입하는 캐스트를 만들 때 경고합니다. 을위한
예를 들어 "char **"를 "const char **"로 캐스팅하는 것은 다음 예와 같이 안전하지 않습니다.
/* p는 char ** 값입니다. */
const char **q = (const char **) p;
/* 읽기 전용 문자열을 const char *에 할당하는 것은 OK입니다. */
*q = "문자열";
/* 이제 char** 포인터가 읽기 전용 메모리를 가리킵니다. */
**p = 'b';
-Wcast 정렬
대상의 필요한 정렬이 다음과 같이 포인터가 캐스팅될 때마다 경고합니다.
증가했다. 예를 들어 "char *"가 다음과 같은 시스템에서 "int *"로 캐스팅되면 경고합니다.
정수는 XNUMX바이트 또는 XNUMX바이트 경계에서만 액세스할 수 있습니다.
-문자열 쓰기
C를 컴파일할 때 문자열 상수에 "const char[길이]" 그래서 복사
하나의 주소를 "const"가 아닌 "char *" 포인터로 지정하면 경고가 생성됩니다. 이것들
경고는 컴파일 시간에 문자열에 쓰려고 할 수 있는 코드를 찾는 데 도움이 됩니다.
상수이지만 선언에서 "const"를 사용하는 데 매우 주의를 기울인 경우에만
그리고 프로토타입. 그렇지 않으면 그것은 단지 귀찮은 일입니다. 이것이 우리가 만들지 않은 이유입니다 -벽
이러한 경고를 요청하십시오.
C++를 컴파일할 때 더 이상 사용되지 않는 문자열 리터럴에서 "char
*". 이 경고는 C++ 프로그램에 대해 기본적으로 활성화되어 있습니다.
-클로버드
"longjmp" 또는 "vfork"에 의해 변경될 수 있는 변수에 대해 경고합니다. 이 경고는
에 의해 활성화됨 -웩스트라.
- 조건부 지원 (C++ 및 Objective-C++만 해당)
조건부 지원(C++11 [intro.defs]) 구문에 대해 경고합니다.
-W변환
값을 변경할 수 있는 암시적 변환에 대해 경고합니다. 여기에는 전환이 포함됩니다.
"x"가 "더블"인 경우 "abs (x)"와 같이 실수와 정수 사이; 사이의 전환
"unsigned ui = -1"과 같이 서명된 것과 서명되지 않은 것; 다음과 같은 더 작은 유형으로의 변환
"sqrtf(M_PI)". "abs ((int) x)" 및 "ui =
(unsigned) -1" 또는 "abs (2.0)"와 같이 변환에 의해 값이 변경되지 않는 경우.
부호 있는 정수와 부호 없는 정수 간의 변환에 대한 경고는 다음과 같이 비활성화할 수 있습니다.
사용 -Wno-sign-변환.
C++의 경우 사용자 정의 변환에 대한 혼란스러운 과부하 해결에 대해서도 경고합니다. 그리고
유형 변환 연산자를 사용하지 않는 변환: "void"로의 변환, 동일
유형, 기본 클래스 또는 참조. 서명된 사이의 변환에 대한 경고
및 부호 없는 정수는 C++에서 기본적으로 비활성화되어 있습니다. -Wsign 변환 is
명시적으로 활성화되었습니다.
-Wno 변환 null (C++ 및 Objective-C++만 해당)
"NULL"과 포인터가 아닌 유형 간의 변환에 대해 경고하지 마십시오. -wconversion-null. is
기본적으로 활성화되어 있습니다.
-Wzero-as-null-포인터 상수 (C++ 및 Objective-C++만 해당)
리터럴 '0'이 널 포인터 상수로 사용될 때 경고합니다. 이것은 유용할 수 있습니다
C++11에서 "nullptr"로의 변환을 용이하게 합니다.
-W날짜-시간
매크로 "__TIME__", "__DATE__" 또는 "__TIMESTAMP__"가 발생하면 경고합니다.
비트 단위로 동일한 재현 가능한 컴파일을 방지할 수 있습니다.
-W삭제-불완전 (C++ 및 Objective-C++만 해당)
불완전한 유형에 대한 포인터를 삭제할 때 경고합니다.
실행 시간. 이 경고는 기본적으로 활성화되어 있습니다.
-쓸데없는 캐스팅 (C++ 및 Objective-C++만 해당)
표현식이 자체 유형으로 캐스트될 때 경고합니다.
- 멍한 몸
"if", "else" 또는 "do while" 문에서 빈 본문이 발생하면 경고합니다. 이 경고
에 의해 활성화됩니다. -웩스트라.
-Wenum-비교
다른 열거 유형의 값 간의 비교에 대해 경고합니다. C++ 열거형에서
조건식의 불일치도 진단되고 경고가 활성화됩니다.
기본. C에서 이 경고는 다음에 의해 활성화됩니다. -벽.
-Wjump-미스-초기화 (C, Objective-C 전용)
"goto" 문 또는 "switch" 문이 가로질러 앞으로 점프하면 경고합니다.
변수 초기화 또는 변수가 완료된 후 레이블로 뒤로 점프
초기화. 이것은 초기화될 때 초기화되는 변수에 대해서만 경고합니다.
선언했다. 이 경고는 C 및 Objective-C에서만 지원됩니다. C++에서 이런 종류의
분기는 어떤 경우에도 오류입니다.
-Wjump-미스-초기화 에 포함 -Wc++-호환. 로 비활성화할 수 있습니다.
-Wno-점프 미스-초기화 옵션을 선택합니다.
-Wsign-비교
부호 있는 값과 부호 없는 값을 비교하면 잘못된 값이 생성될 수 있음을 경고합니다.
부호 있는 값이 부호 없는 값으로 변환될 때의 결과입니다. 이 경고도 활성화되어 있습니다.
by -웩스트라; 다른 경고를 받기 위해 -웩스트라 이 경고 없이 사용 -웩스트라
-Wno-sign-비교.
-Wsign 변환
다음과 같이 정수 값의 부호를 변경할 수 있는 암시적 변환에 대해 경고합니다.
부호 있는 정수 표현식을 부호 없는 정수 변수에 할당합니다. 명시적
캐스트는 경고를 침묵시킵니다. C에서 이 옵션은 다음에 의해서도 활성화됩니다. -W변환.
-Wfloat 변환
실제 값의 정밀도를 줄이는 암시적 변환에 대해 경고합니다. 이것
실수에서 정수로의 변환 및 더 높은 정밀도의 실수에서 더 낮은 것으로의 변환을 포함합니다.
정확한 실제 값. 이 옵션은 다음에 의해서도 활성화됩니다. -W변환.
-크기 할당 해제 (C++ 및 Objective-C++만 해당)
크기가 지정되지 않은 할당 해제 함수의 정의에 대해 경고합니다.
void 연산자 삭제(void *) noexcept;
무효 연산자 delete[] (무효 *) noexcept;
상응하는 크기의 할당 해제 함수의 정의 없이
void 연산자 삭제 (void *, std::size_t) noexcept;
void 연산자 delete[] (void *, std::size_t) noexcept;
혹은 그 반대로도. 에 의해 활성화됨 -웩스트라 와 함께 -fsize-deallocation.
-Wsizeof-pointer-memaccess
특정 문자열 및 메모리 내장 함수에 대한 의심스러운 길이 매개변수 경고
인수가 "sizeof"를 사용하는 경우. 이 경고는 "memset(ptr, 0, sizeof
(ptr));" "ptr"이 배열이 아니라 포인터이고 가능한 수정을 제안하는 경우 또는
"memcpy(&foo, ptr, sizeof(&foo))"에 대해. 이 경고는 다음에 의해 활성화됩니다. -벽.
-Wsizeof-배열 인수
배열로 선언된 매개변수에 "sizeof" 연산자가 적용될 때 경고
함수 정의에서. 이 경고는 C 및 C++ 프로그램에 대해 기본적으로 활성화되어 있습니다.
-Wmemset-transposed-args
두 번째 인수가 다음과 같은 경우 "memset" 내장 함수에 대한 의심스러운 호출에 대해 경고합니다.
XNUMX이 아니고 세 번째 인수는 XNUMX입니다. 이것은 "memset(buf, sizeof
buf, 0)" 여기서 아마도 "memset(buf, 0, sizeof buf)"를 의미했을 것입니다.
진단은 세 번째 인수가 리터럴 XNUMX인 경우에만 내보냅니다. 일부라면
XNUMX으로 접힌 표현식, XNUMX을 특정 유형으로 캐스트 등은 훨씬 적습니다.
사용자가 실수로 인수를 교환했고 경고가 발생하지 않았을 가능성이 높습니다.
이 경고는 다음에 의해 활성화됩니다. -벽.
-워드레스
메모리 주소의 의심스러운 사용에 대해 경고합니다. 여기에는 다음 주소를 사용하는 것이 포함됩니다.
"void func(void); if(func)"와 같은 조건식의 함수 및
"if (x == "abc")"와 같은 문자열 리터럴의 메모리 주소에 대한 비교.
이러한 사용은 일반적으로 프로그래머 오류를 나타냅니다. 함수의 주소는 항상
true로 평가되므로 조건부에서 사용하면 일반적으로 프로그래머가
함수 호출에서 괄호를 잊어 버렸습니다. 문자열 리터럴과의 비교
지정되지 않은 동작이 발생하고 C에서 이식 가능하지 않으므로 일반적으로 다음을 나타냅니다.
프로그래머가 "strcmp"를 사용하려고 했던 것입니다. 이 경고는 다음에 의해 활성화됩니다. -벽.
-W논리적 연산
표현식에서 의심스러운 논리 연산자 사용에 대해 경고합니다. 여기에는 다음을 사용하는 것이 포함됩니다.
비트 단위 연산자가 예상되는 컨텍스트의 논리 연산자.
-Wlogical-not-괄호
비교의 왼쪽 피연산자에 논리가 사용되지 않음에 대해 경고합니다. 이것
옵션은 RHS 피연산자가 부울 유형인 경우 경고하지 않습니다. 그 목적은
다음과 같은 의심스러운 코드를 감지합니다.
정수
...
만약 (!a > 1) { ... }
LHS를 괄호로 묶어 경고를 표시하지 않을 수 있습니다.
if ((!a) > 1) { ... }
이 경고는 다음에 의해 활성화됩니다. -벽.
-Waggregate-리턴
구조체 또는 공용체를 반환하는 함수가 정의되거나 호출되면 경고합니다. (에
배열을 반환할 수 있는 언어인 경우에도 경고가 표시됩니다.)
- Wno-aggressive-loop 최적화
반복 횟수가 일정한 루프에서 컴파일러가 정의되지 않은 것을 감지하면 경고
하나 이상의 반복 동안 일부 명령문의 동작.
-Wno-속성
인식할 수 없는 속성과 같이 예기치 않은 "__attribute__"가 사용되는 경우 경고하지 마십시오.
변수 등에 적용된 함수 속성
지원되는 속성의 잘못된 사용.
-Wno 내장 매크로 재정의
특정 내장 매크로가 재정의되면 경고하지 마십시오. 이것은 다음에 대한 경고를 표시하지 않습니다.
"__TIMESTAMP__", "__TIME__", "__DATE__", "__FILE__"의 재정의 및
"__BASE_FILE__".
-Wstrict 프로토타입 (C 및 Objective-C만 해당)
인수 유형을 지정하지 않고 함수가 선언되거나 정의되면 경고합니다. (NS
이전 스타일의 함수 정의가 앞에 오는 경우 경고 없이 허용됩니다.
인수 유형을 지정하는 선언).
-Wold 스타일 선언 (C 및 Objective-C만 해당)
선언에서 C 표준에 따라 더 이상 사용되지 않는 사용에 대해 경고합니다. 을위한
예를 들어 "정적"과 같은 스토리지 클래스 지정자가
선언. 이 경고는 다음에 의해서도 활성화됩니다. -웩스트라.
-Wold 스타일 정의 (C 및 Objective-C만 해당)
구식 함수 정의가 사용되는 경우 경고합니다. 있는 경우에도 경고가 표시됩니다.
이전 프로토타입.
-Wmissing-매개변수 유형 (C 및 Objective-C만 해당)
함수 매개변수는 K&R 스타일 함수에서 유형 지정자 없이 선언됩니다.
무효 foo(막대) { }
이 경고는 다음에 의해서도 활성화됩니다. -웩스트라.
-Wmissing-프로토타입 (C 및 Objective-C만 해당)
이전 프로토타입 선언 없이 전역 함수가 정의된 경우 경고합니다. 이것
정의 자체가 프로토타입을 제공하더라도 경고가 발행됩니다. 이 옵션을 사용
일치하는 프로토타입 선언이 없는 전역 함수를 감지하기 위해
헤더 파일. 모든 함수 선언 때문에 이 옵션은 C++에 유효하지 않습니다.
프로토타입을 제공하고 일치하지 않는 선언은
이전 선언과 충돌합니다. 사용하다 -Wmissing-선언 누락을 감지하기 위해
C++에서 선언.
-Wmissing-선언
전역 함수가 이전 선언 없이 정의되면 경고합니다. 경우에도 그렇게 하십시오
정의 자체가 프로토타입을 제공합니다. 이 옵션을 사용하여 전역
헤더 파일에 선언되지 않은 함수 C에서는 경고가 발행되지 않습니다.
이전의 비 프로토타입 선언이 있는 함수; 사용하다 -Wmissing-프로토타입 감지
누락 된 프로토 타입. C++에서는 함수 템플릿에 대해 경고가 발행되지 않습니다.
인라인 함수 또는 익명 네임스페이스의 함수용.
-Wmissing-field-initializers
구조의 이니셜라이저에 일부 필드가 누락된 경우 경고합니다. 예를 들어, 다음
"xh"가 암시적으로 XNUMX이기 때문에 코드에서 이러한 경고가 발생합니다.
구조체 s { int f, g, h; };
구조체 sx = { 3, 4 };
이 옵션은 지정된 이니셜라이저에 대해 경고하지 않으므로 다음 수정
경고를 트리거하지 않습니다:
구조체 s { int f, g, h; };
구조체 sx = { .f = 3, .g = 4 };
C++에서 이 옵션은 빈 { } 이니셜라이저에 대해 경고하지 않습니다. 예를 들면 다음과 같습니다.
구조체 s { int f, g, h; };
sx = { };
이 경고는 -웩스트라. 다른 것을 얻으려면 -웩스트라 이것이 없으면 경고,
사용 -웩스트라 -Wno-missing-field-initializers.
-Wno-다중 문자
다중 문자 상수('푸프') 사용. 일반적으로 그들은 나타냅니다
사용자 코드의 오타는 구현에 정의된 값을 가지고 있기 때문에
이식 가능한 코드에 사용됩니다.
- 정규화[=<없음|id|NFC|nfkc>]
ISO C 및 ISO C++에서 두 식별자는 서로 다른 시퀀스인 경우 서로 다릅니다.
문자. 그러나 때때로 기본 ASCII 문자 집합 이외의 문자가
사용되는 경우 동일하게 보이는 두 개의 서로 다른 문자 시퀀스를 가질 수 있습니다. 피하기 위해
혼란, ISO 10646 표준은 몇 가지 표준화 규칙 적용할 때
같아 보이는 두 시퀀스가 동일한 시퀀스로 바뀌는지 확인합니다. GCC
정규화되지 않은 식별자를 사용하는 경우 경고할 수 있습니다. 이 옵션
해당 경고를 제어합니다.
GCC에서 지원하는 경고에는 네 가지 수준이 있습니다. 기본값은 -표준화=nfc,
ISO 10646 "C" 정규화 형식이 아닌 식별자에 대해 경고합니다.
NFC. NFC는 대부분의 용도에 권장되는 형식입니다. 그것은 동등하다 - 정규화.
불행히도 ISO C 및 ISO C++에서 식별자에 허용되는 일부 문자가 있습니다.
NFC로 전환되면 식별자에서 허용되지 않습니다. 즉 방법이 없다.
휴대용 ISO C 또는 C++에서 이러한 기호를 사용하고 NFC에 모든 식별자를 포함합니다.
-표준화=id 이 문자에 대한 경고를 표시하지 않습니다. 미래가 기대된다
관련된 표준 버전이 이를 수정하므로 이 옵션이
기본값.
다음을 작성하여 모든 문자에 대한 경고를 끌 수 있습니다. -W정규화=없음 or
- 정규화되지 않음. 다른 정규화를 사용하는 경우에만 이 작업을 수행해야 합니다.
스키마(예: "D"), 그렇지 않으면 문자 그대로 버그를 쉽게 생성할 수 있기 때문입니다.
볼 수 없습니다.
ISO 10646의 일부 문자는 고유한 의미를 갖지만 일부 글꼴에서는 동일하게 보입니다.
특히 포맷이 적용된 후에는 방법론을 표시할 수 있습니다. 예를 들어
"\u207F", "SUPERSCRIPT LATIN SMALL LETTER N"은 일반 "n"처럼 표시됩니다.
위 첨자에 배치되었습니다. ISO 10646은 다음을 정의합니다. NFKC 정규화 계획
이 모든 것을 표준 형식으로도 변환하면 GCC에서 코드가
NFKC를 사용하는 경우 -표준화=nfkc. 이 경고는 모든
숫자 0과 혼동될 수 있으므로 문자 O가 포함된 식별자,
따라서 기본값은 아니지만 다음과 같은 경우 로컬 코딩 규칙으로 유용할 수 있습니다.
프로그래밍 환경은 이러한 문자를 뚜렷하게 표시하도록 수정할 수 없습니다.
- 더 이상 사용되지 않음
더 이상 사용되지 않는 기능의 사용에 대해 경고하지 마십시오.
-Wno-deprecated-선언
더 이상 사용되지 않는 것으로 표시된 함수, 변수 및 유형의 사용에 대해 경고하지 마십시오.
"deprecated" 속성을 사용합니다.
-Wno 오버플로
상수 표현식에서 컴파일 타임 오버플로에 대해 경고하지 마십시오.
-Wno-odr
링크 시간 최적화 중 하나의 정의 규칙 위반에 대해 경고합니다. 필요
-flto-odr-유형 병합 활성화됩니다. 기본적으로 활성화되어 있습니다.
-Wopenmp-simd
벡터화 비용 모델이 OpenMP 또는 Cilk Plus simd 지시문을 재정의하는 경우 경고
사용자가 설정합니다. NS -fsimd-비용 모델=무제한 옵션을 사용하여 비용을 완화할 수 있습니다.
모델입니다.
-Woverride 초기화 (C 및 Objective-C만 해당)
지정된 사용 시 부작용이 없는 초기화된 필드가 재정의되면 경고
이니셜라이저.
이 경고는 -웩스트라. 다른 것을 얻으려면 -웩스트라 이것이 없으면 경고,
사용 -웩스트라 -Wno-재정의-초기화.
-W포장
구조에 패킹된 속성이 지정되어 있지만 패킹된 속성에 없는 경우 경고합니다.
구조의 레이아웃이나 크기에 영향을 미칩니다. 이러한 구조는 다음과 같이 잘못 정렬될 수 있습니다.
작은 이익. 예를 들어, 이 코드에서 "struct bar"의 변수 "fx"는
"struct bar" 자체에 패킹된 속성이 없는 경우에도 잘못 정렬됨:
구조체 foo {
int x;
문자 a, b, c, d;
} __attribute __ ((packed));
구조체 막대 {
문자 Z;
구조체 foo f;
};
-Wpacked-bitfield-compat
GCC의 4.1, 4.2 및 4.3 시리즈는 다음 유형의 비트 필드에서 "packed" 속성을 무시합니다.
"숯". 이것은 GCC 4.4에서 수정되었지만 변경으로 인해
구조 레이아웃. GCC에서 이러한 필드의 오프셋이 변경되면 GCC에서 알려줍니다.
4.4. 예를 들어 "a" 필드와 "b" 필드 사이에 더 이상 4비트 패딩이 없습니다.
구조:
구조 foo
{
문자 a:4;
문자 b:8;
} __attribute__ ((포장));
이 경고는 기본적으로 활성화되어 있습니다. 사용하다 -Wno-packed-bitfield-compat 이것을 비활성화하려면
경고.
-W패딩
패딩이 구조체에 포함되어 있으면 경고합니다.
구조 또는 전체 구조를 정렬합니다. 가끔 이런 일이 있을 때 가능하다
패딩을 줄이기 위해 구조의 필드를 재정렬하고
더 작은 구조.
- Wredundant-decls
동일한 범위에서 두 번 이상 선언된 항목이 있으면 경고합니다.
다중 선언은 유효하며 아무 것도 변경하지 않습니다.
-Wnested-externs (C 및 Objective-C만 해당)
함수 내에서 "extern" 선언이 발견되면 경고합니다.
-Wno-상속된-variadic-ctor
기본 클래스인 경우 C++11 상속 생성자 사용에 대한 경고 표시 안 함
에서 상속된 C variadic 생성자가 있습니다. 경고는 기본적으로 켜져 있기 때문에
줄임표는 상속되지 않습니다.
-윈라인
인라인으로 선언된 함수를 인라인할 수 없는 경우 경고합니다. 이것으로도
옵션을 사용하면 컴파일러는 에 선언된 인라인 함수 실패에 대해 경고하지 않습니다.
시스템 헤더.
컴파일러는 다양한 경험적 방법을 사용하여 인라인할 것인지 여부를 결정합니다.
기능. 예를 들어 컴파일러는 함수의 크기를 고려합니다.
인라인 및 현재 함수에서 이미 수행된 인라인 양입니다.
따라서 소스 프로그램에서 겉보기에 중요하지 않은 변경 사항이 발생할 수 있습니다.
에 의해 생성된 경고 -윈라인 나타나거나 사라지다.
-Wno-invalid-offsetof (C++ 및 Objective-C++만 해당)
"offsetof" 매크로를 POD가 아닌 유형에 적용하는 경고를 억제합니다. 에 따르면
2014 ISO C++ 표준에서 "offsetof"를 비표준 레이아웃 유형에 적용하는 것은
찾으시는 주소가 없습니다. 그러나 기존 C++ 구현에서 "offsetof"는 일반적으로 다음을 제공합니다.
의미 있는 결과. 이 플래그는 자신이 쓰고 있음을 알고 있는 사용자를 위한 것입니다.
이식할 수 없는 코드와 이에 대한 경고를 의도적으로 무시하기로 선택한 사용자.
"offsetof"에 대한 제한은 C++ 표준의 향후 버전에서 완화될 수 있습니다.
- 포인터 투 포인터 캐스트 없음
크기가 다른 정수의 포인터 유형에 대한 캐스트에서 경고를 표시하지 않습니다. 에
C++에서 더 작은 크기의 포인터 유형으로 캐스팅하는 것은 오류입니다. Wint-to-pointer 캐스트 is
기본적으로 활성화되어 있습니다.
- Wno-pointer-to-int-cast (C 및 Objective-C만 해당)
포인터에서 다른 크기의 정수 유형으로의 캐스트 경고를 억제합니다.
-Winvalid-pch
미리 컴파일된 헤더가 검색 경로에 있지만 사용할 수 없는 경우 경고합니다.
-롱롱
"long long" 유형이 사용되는 경우 경고합니다. 이것은 다음 중 하나에 의해 활성화됩니다. -Wpedantic or
-전통적인 ISO C90 및 C++98 모드에서. 경고 메시지를 금지하려면 다음을 사용하십시오.
-오롱롱.
-Wvariadic 매크로
가변 매크로가 ISO C90 모드에서 사용되거나 GNU 대체 구문이 다음과 같은 경우 경고합니다.
ISO C99 모드에서 사용됩니다. 이것은 다음 중 하나에 의해 활성화됩니다. -Wpedantic or -전통적인. 에
경고 메시지 금지, 사용 -Wno-variadic-매크로.
-Wvarargs
다음과 같은 변수 인수를 처리하는 데 사용되는 매크로의 의심스러운 사용에 대해 경고합니다.
"va_start". 이것은 기본값입니다. 경고 메시지를 금지하려면 다음을 사용하십시오. -Wno-변수.
-W벡터 작업 성능
아키텍처의 SIMD 기능을 통해 벡터 작업이 구현되지 않으면 경고합니다.
주로 성능 조정에 유용합니다. 벡터 연산 구현 가능
"조각별", 이는 스칼라 연산이 모든 벡터에 대해 수행됨을 의미합니다.
요소; "병렬로", 이는 벡터 연산이 다음을 사용하여 구현됨을 의미합니다.
일반적으로 더 성능 효율적인 더 넓은 유형의 스칼라; 그리고 "싱글로
스칼라", 이는 벡터가 스칼라 유형에 맞는다는 것을 의미합니다.
-Wno-가상 이동 할당
사소한 C++11 이동으로 가상 기반에서 상속에 대한 경고 표시 안 함
할당 연산자. 가상 기지가
경로가 두 개 이상인 경우 여러 번 이동하므로 두 개체가 모두
이사한 상태. 이동 할당 연산자가 에서 이동하지 않도록 작성된 경우
이동한 개체에서 이 경고를 비활성화할 수 있습니다.
- 블라
코드에 가변 길이 배열이 사용되면 경고합니다. -우노블라 방지 -Wpedantic
가변 길이 배열의 경고.
-W휘발성 레지스터 변수
레지스터 변수가 휘발성으로 선언되면 경고합니다. 휘발성 수정자는
레지스터에 대한 읽기 및/또는 쓰기를 제거할 수 있는 모든 최적화 금지
변수. 이 경고는 다음에 의해 활성화됩니다. -벽.
-Wdisabled-최적화
요청한 최적화 단계가 비활성화되면 경고합니다. 이 경고는 일반적으로
코드에 문제가 있음을 나타냅니다. 그것은 단지 GCC의
최적화 프로그램은 코드를 효과적으로 처리할 수 없습니다. 종종 문제는
코드가 너무 크거나 너무 복잡합니다. GCC는 최적화할 때 프로그램 최적화를 거부합니다.
자체적으로 시간이 너무 많이 소요될 수 있습니다.
-Wpointer 기호 (C 및 Objective-C만 해당)
포인터 인수 전달 또는 부호가 다른 할당에 대해 경고합니다. 이것
옵션은 C 및 Objective-C에서만 지원됩니다. 에 의해 암시된다 -벽 과 별
-Wpedantic로 비활성화할 수 있습니다. -Wno 포인터 기호.
-Wstack 보호기
이 옵션은 다음 경우에만 활성화됩니다. -fstack 보호기 활성. 기능에 대해 경고합니다.
스택 스매싱으로부터 보호되지 않습니다.
-Woverlength-문자열
"최소 최대" 길이보다 긴 문자열 상수에 대해 경고
C 표준에 명시되어 있습니다. 최신 컴파일러는 일반적으로 다음과 같은 문자열 상수를 허용합니다.
표준의 최소 제한보다 훨씬 길지만 이식성이 뛰어난 프로그램은
더 긴 문자열을 사용하지 마십시오.
한도 적용 시간 내에 문자열 상수 연결, 후행은 계산하지 않음
무효. C90에서 제한은 509자였습니다. C99에서는 4095로 올라갔습니다. C++98은
표준 최소 최대값을 지정하지 않으므로 길이가 초과된 문자열은 진단하지 않습니다.
C ++.
이 옵션은 -Wpedantic로 비활성화할 수 있습니다.
-Wno-overlength-문자열.
-Wunsuffixed 부동 소수점 상수 (C 및 Objective-C만 해당)
접미사가 없는 부동 상수에 대해 경고를 발행합니다. 사용시
와 함께 -Wsystem 헤더 시스템 헤더 파일에서 이러한 상수에 대해 경고합니다.
이것은 "FLOAT_CONST_DECIMAL64" pragma와 함께 사용할 코드를 준비할 때 유용할 수 있습니다.
99진 부동 소수점 확장에서 CXNUMX로.
-Wno 지정 초기화 (C 및 Objective-C만 해당)
위치 이니셜라이저를 사용하여
"designated_init" 속성으로 표시되었습니다.
옵션 for 디버깅 너의 프로그램 or GCC
GCC에는 프로그램이나 GCC를 디버깅하는 데 사용되는 다양한 특수 옵션이 있습니다.
-g 운영 체제의 기본 형식(stabs, COFF,
XCOFF 또는 DWARF 2). GDB는 이 디버깅 정보로 작업할 수 있습니다.
stabs 형식을 사용하는 대부분의 시스템에서 -g 추가 디버깅 정보 사용 가능
GDB만이 사용할 수 있는 것; 이 추가 정보는 GDB에서 디버깅 작업을 더 잘 수행하지만
다른 디버거가 충돌을 일으키거나 프로그램 읽기를 거부할 수 있습니다. 원하는 경우
추가 정보를 생성할지 여부에 대한 제어, 사용 -gstabs +, -gstabs,
-gxcoff+, -gxcoff및 -gvms (아래 참조).
GCC를 사용하면 -g 과 -O. 최적화된 코드에서 사용하는 단축키는
때때로 놀라운 결과가 발생합니다. 선언한 일부 변수는 에 존재하지 않을 수 있습니다.
모두; 통제의 흐름이 예상하지 못한 곳으로 잠시 이동할 수 있습니다. 일부 진술은
상수 결과를 계산하거나 해당 값이 이미 에 있기 때문에 실행되지 않습니다.
손; 일부 명령문은 다른 곳으로 옮겨졌기 때문에 다른 위치에서 실행될 수 있습니다.
루프의.
그럼에도 불구하고 최적화된 출력을 디버그할 수 있음이 입증되었습니다. 이것은 합리적으로 만든다.
버그가 있을 수 있는 프로그램에 최적화 프로그램을 사용합니다.
다음 옵션은 더 많은 기능을 가진 GCC가 생성될 때 유용합니다.
하나 이상의 디버깅 형식.
-gsplit-dwarf
가능한 한 많은 드워프 디버깅 정보를 별도의 출력 파일로 분리하십시오.
확장자가 .dwo입니다. 이 옵션을 사용하면 빌드 시스템에서 파일 연결을 피할 수 있습니다.
디버그 정보와 함께. 유용하려면 이 옵션을 사용할 수 있는 디버거가 필요합니다.
.dwo 파일 읽기.
-ggdb
GDB에서 사용할 디버깅 정보를 생성합니다. 이것은 가장 표현력이
사용 가능한 형식(DWARF 2, 찌르기 또는 둘 다 없는 경우 기본 형식
지원됨) 가능하면 GDB 확장을 포함합니다.
-gpub이름
dwarf .debug_pubnames 및 .debug_pubtypes 섹션을 생성합니다.
-ggnu-pubnames
에 적합한 형식으로 .debug_pubnames 및 .debug_pubtypes 섹션을 생성합니다.
GDB 인덱스로 변환. 이 옵션은 다음을 수행할 수 있는 링커에서만 유용합니다.
GDB 인덱스 버전 7을 생성합니다.
-gstabs
GDB 없이 디버깅 정보를 stabs 형식(지원되는 경우)으로 생성합니다.
확장. 이것은 대부분의 BSD 시스템에서 DBX가 사용하는 형식입니다. MIPS, 알파 및
System V 릴리스 4 시스템 이 옵션은 stabs 디버깅 출력을 생성하지 않습니다.
DBX 또는 SDB에서 이해합니다. System V 릴리스 4 시스템에서 이 옵션을 사용하려면 GNU가 필요합니다.
어셈블러.
-feliminate-unused-debug-기호
기호에 대해서만 stabs 형식(지원되는 경우)의 디버깅 정보 생성
실제로 사용되는 것입니다.
-femit-class-debug-항상
하나의 개체 파일에서만 C++ 클래스에 대한 디버깅 정보를 내보내는 대신,
클래스를 사용하여 모든 객체 파일에서 방출합니다. 이 옵션은 다음과 함께 사용해야 합니다.
GCC가 일반적으로 디버깅 정보를 내보내는 방식을 처리할 수 없는 디버거
이 옵션을 사용하면 디버깅 정보의 크기가 증가하기 때문에
XNUMX배만큼.
-fdebug-types-섹션
DWARF 버전 4 이상을 사용하는 경우 유형 DIE를 자체적으로 넣을 수 있습니다.
".debug_info" 섹션의 일부로 만드는 대신 ".debug_types" 섹션. 그것
링커가 할 수 있기 때문에 별도의 comdat 섹션에 넣는 것이 더 효율적
중복을 제거하십시오. 그러나 모든 DWARF 소비자가 아직 ".debug_types" 섹션을 지원하는 것은 아닙니다.
일부 개체에서 ".debug_types"는 더 작은 디버깅 대신 더 크게 생성합니다.
정보.
-gstabs +
GNU를 사용하여 stabs 형식(지원되는 경우)으로 디버깅 정보 생성
GNU 디버거(GDB)에서만 이해할 수 있는 확장입니다. 이러한 확장의 사용은
다른 디버거가 충돌을 일으키거나 프로그램 읽기를 거부할 가능성이 있습니다.
-gcoff
COFF 형식으로 디버깅 정보를 생성합니다(지원되는 경우). 이것이
System V 릴리스 4 이전의 대부분의 System V 시스템에서 SDB가 사용하는 형식입니다.
-gxcoff
XCOFF 형식으로 디버깅 정보를 생성합니다(지원되는 경우). 이것이
IBM RS/6000 시스템의 DBX 디버거에서 사용하는 형식입니다.
-gxcoff+
GNU를 사용하여 XCOFF 형식(지원되는 경우)으로 디버깅 정보 생성
GNU 디버거(GDB)에서만 이해할 수 있는 확장입니다. 이러한 확장의 사용은
다른 디버거가 충돌을 일으키거나 프로그램 읽기를 거부할 가능성이 있으며
GNU 어셈블러(GAS) 이외의 어셈블러는 오류와 함께 실패합니다.
-그드워프-버전
DWARF 형식으로 디버깅 정보를 생성합니다(지원되는 경우). 의 가치
버전 2, 3, 4 또는 5일 수 있습니다. 대부분의 대상에 대한 기본 버전은 4입니다. DWARF
버전 5는 실험적입니다.
DWARF 버전 2에서는 일부 포트가 충돌하지 않는 일부 포트를 필요로 하고 항상 사용합니다.
해제 테이블의 DWARF 3 확장.
버전 4에는 GDB 7.0 및 -fvar-추적 할당 최대 이익을 위해.
-grecord-gcc-스위치
이 스위치로 인해 컴파일러를 호출하는 데 사용되는 명령줄 옵션이
DWARF의 DW_AT_producer 속성에 추가될 코드 생성에 영향을 줍니다.
디버깅 정보. 옵션은 다음과 구분되는 공백으로 연결됩니다.
서로 그리고 컴파일러 버전에서. 또한보십시오 -frecord-gcc-스위치 다른이를 위해
컴파일러 옵션을 개체 파일에 저장하는 방법입니다. 이것이 기본값입니다.
-gno-record-gcc-스위치
DWARF의 DW_AT_producer 속성에 명령줄 옵션을 추가하는 것을 허용하지 않습니다.
디버깅 정보.
-gstrict-dwarf
에서 선택한 것보다 최신 DWARF 표준 버전의 확장 사용을 허용하지 않습니다.
-그드워프-버전. 이후의 충돌하지 않는 DWARF 확장을 사용하는 대부분의 대상에서
표준 버전이 허용됩니다.
-gno-strict-dwarf
선택한 것보다 최신 DWARF 표준 버전의 확장 사용 허용
-그드워프-버전.
-gz[=유형]
지원되는 경우 DWARF 형식으로 압축된 디버그 섹션을 생성합니다. 만약에 유형 is
지정되지 않은 경우 기본 유형은 어셈블러 및 링커의 기능에 따라 다릅니다.
익숙한. 유형 중 하나 일 수 있습니다 없음 (디버그 섹션을 압축하지 마십시오), ZLIB (zlib 사용
ELF gABI 형식의 압축), 또는 zlib-gnu (기존 GNU에서 zlib 압축 사용
체재). 링커가 압축된 디버그 섹션 작성을 지원하지 않는 경우 옵션
거부됩니다. 그렇지 않고 어셈블러가 지원하지 않으면 -gz 조용히
개체 파일을 생성할 때 무시됩니다.
-gvms
Alpha/VMS 디버그 형식으로 디버깅 정보를 생성합니다(지원되는 경우). 이것
Alpha/VMS 시스템의 DEBUG에서 사용하는 형식입니다.
-g수평
-ggdb수평
-gstabs수평
-gcoff수평
-gxcoff수평
-gvms수평
디버깅 정보 요청 및 사용 수평 정보의 양을 지정합니다. NS
기본 레벨은 2입니다.
레벨 0은 디버그 정보를 전혀 생성하지 않습니다. 따라서, -g0 부정하다 -g.
레벨 1은 최소한의 정보를 생성하여 일부를 역추적하기에 충분합니다.
디버그할 계획이 없는 프로그램. 여기에는 기능에 대한 설명과
외부 변수 및 행 번호 테이블은 있지만 지역 변수에 대한 정보는 없습니다.
레벨 3에는 파일에 있는 모든 매크로 정의와 같은 추가 정보가 포함됩니다.
프로그램. 일부 디버거는 다음을 사용할 때 매크로 확장을 지원합니다. -g3.
-gdwarf-2 GCC가 지원하는 데 사용되었기 때문에 연결된 디버그 수준을 허용하지 않습니다.
option -gdwarf 이는 DWARF 버전 1에서 디버그 정보를 생성한다는 의미입니다.
형식(버전 2와 매우 다름)이며 너무 혼란스러웠을 것입니다.
해당 디버그 형식은 더 이상 사용되지 않지만 지금은 옵션을 변경할 수 없습니다. 대신 사용
추가의 -g수평 DWARF의 디버그 수준을 변경하는 옵션입니다.
-gttoggle
이 옵션을 생략하면 디버그 정보 생성을 끄거나 끄십시오.
그렇지 않으면 레벨 2에서 켜집니다. 명령줄에서 이 인수의 위치는
문제; 다른 모든 옵션이 처리된 후에 적용되며,
몇 번을 주어도 한 번. 이것은 주로 다음과 함께 사용하기 위한 것입니다.
-fcompare-디버그.
-fsanitize=주소
빠른 메모리 오류 감지기인 AddressSanitizer를 활성화합니다. 메모리 액세스 명령은
out-of-bounds 및 use-after-free 버그를 감지하도록 계측되었습니다. 보다
<https://github.com/google/sanitizers/wiki/AddressSanitizer> 자세한 내용은. NS
런타임 동작은 다음을 사용하여 영향을 받을 수 있습니다. ASAN_OPTIONS 환경 변수. 언제
"help=1"로 설정하면 사용 가능한 옵션이 기기 시작 시 표시됩니다.
프로그램. 보다
<https://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run-time-flags> 위해
지원되는 옵션 목록.
-fsanitize=커널 주소
Linux 커널용 AddressSanitizer를 활성화합니다. 보다https://github.com/google/kasan/wiki>
자세한 내용은.
-fsanitize=쓰레드
빠른 데이터 경합 감지기인 ThreadSanitizer를 활성화합니다. 메모리 액세스 명령은
데이터 경쟁 버그를 감지하도록 구성되었습니다. 보다
<https://github.com/google/sanitizers/wiki#threadsanitizer> 자세한 내용은. 질주-
시간 행동은 다음을 사용하여 영향을 받을 수 있습니다. TSAN_OPTIONS 환경 변수; 보다
<https://github.com/google/sanitizers/wiki/ThreadSanitizerFlags> 목록의 경우
지원되는 옵션.
-fsanitize=누출
메모리 누수 감지기인 LeakSanitizer를 활성화합니다. 이 옵션은
실행 파일과 둘 다 없는 경우 -fsanitize=주소 ...도 아니다 -fsanitize=쓰레드 사용. 그 안에
실행 파일이 "malloc" 및 기타를 재정의하는 라이브러리에 대해 링크된 경우
할당자 기능. 보다
<https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer> 더
세부. 런타임 동작은 다음을 사용하여 영향을 받을 수 있습니다. LSAN_OPTIONS 환경
변하기 쉬운.
-fsanitize=정의되지 않음
빠른 정의되지 않은 동작 감지기인 UndefinedBehaviorSanitizer를 활성화합니다. 다양한
계산은 런타임에 정의되지 않은 동작을 감지하도록 계측됩니다. 현재의
하위 옵션은 다음과 같습니다.
-fsanitize=시프트
이 옵션을 사용하면 시프트 작업의 결과가
찾으시는 주소가 없습니다. 정확히 정의되지 않은 것으로 간주되는 것은 약간 다릅니다.
C와 C++ 사이, ISO C90과 C99 사이 등
-fsanitize=XNUMX으로 정수 나누기
"INT_MIN / -1" 나눗셈 뿐만 아니라 XNUMX으로 정수 나눗셈을 감지합니다.
-fsanitize=연결 불가
이 옵션을 사용하면 컴파일러는 "__builtin_unreachable" 호출을
대신 진단 메시지 호출. "__builtin_unreachable" 호출에 도달하면,
동작은 정의되지 않습니다.
-fsanitize=vla 바인딩
이 옵션은 컴파일러가 가변 길이의 크기를 확인하도록 지시합니다.
배열은 양수입니다.
-fsanitize=널
이 옵션은 포인터 검사를 활성화합니다. 특히,
이 옵션을 켜면 역참조를 시도할 때 오류 메시지가 표시됩니다.
NULL 포인터 또는 참조(rvalue 참조)가 NULL에 바인딩된 경우
포인터 또는 NULL 포인터가 가리키는 개체에서 메서드가 호출된 경우.
-fsanitize=반환
이 옵션은 return 문 검사를 활성화합니다. 이 옵션으로 빌드된 프로그램
켜져 있으면 무효가 아닌 함수의 끝이 다음과 같을 때 오류 메시지가 표시됩니다.
실제로 값을 반환하지 않고 도달했습니다. 이 옵션은 C++에서만 작동합니다.
-fsanitize=부호-정수-오버플로
이 옵션은 부호 있는 정수 오버플로 검사를 활성화합니다. 우리는 의 결과를 확인합니다
"+", "*" 및 단항 및 이진 "-"는 부호 있는 형식에서 오버플로되지 않습니다.
산술. 정수 승격 규칙을 고려해야 합니다. 그건,
다음은 오버플로가 아닙니다.
부호 있는 char a = SCHAR_MAX;
++;
-fsanitize=경계
이 옵션은 배열 경계의 계측을 활성화합니다. 범위를 벗어난 다양한
액세스가 감지됩니다. 유연한 배열 구성원, 유연한 배열 구성원과 유사한 배열,
정적 저장소가 있는 변수의 이니셜라이저는 계측되지 않습니다.
-fsanitize=정렬
이 옵션을 사용하면 포인터가 역참조될 때 정렬을 확인할 수 있습니다.
또는 참조가 불충분하게 정렬된 대상에 바인딩된 경우 또는 방법 또는
정렬되지 않은 개체에서 생성자가 호출됩니다.
-fsanitize=객체 크기
이 옵션을 사용하면 메모리 참조를 계측할 수 있습니다.
"__builtin_object_size" 함수. 범위를 벗어난 다양한 포인터 액세스는
감지되었습니다.
-fsanitize=XNUMX으로 부동 소수점 나누기
XNUMX으로 부동 소수점 나누기를 감지합니다. 다른 유사한 옵션과 달리,
-fsanitize=XNUMX으로 부동 소수점 나누기 에 의해 활성화되지 않음 -fsanitize=정의되지 않음이후
XNUMX으로 부동 소수점 나누기는 무한대를 얻는 합법적인 방법이 될 수 있습니다.
및 NaN.
-fsanitize=float-cast-overflow
이 옵션은 부동 소수점 유형에서 정수로의 변환 검사를 활성화합니다. 우리는 확인
변환 결과가 오버플로되지 않습니다. 다른 유사품과 달리
옵션 -fsanitize=float-cast-overflow 에 의해 활성화되지 않음 -fsanitize=정의되지 않음.
이 옵션은 "FE_INVALID" 예외가 활성화된 상태에서 제대로 작동하지 않습니다.
-fsanitize=null이 아닌 속성
이 옵션은 호출 계측을 활성화하여 null 값이
"nonnull" 함수에 의해 null이 아닌 값이 필요한 것으로 표시된 인수에 전달됨
속성을 사용하지 않는 것입니다.
-fsanitize=null이 아닌 속성을 반환
이 옵션은
"returns_nonnull" 함수 속성, 이러한 값에서 null 값 반환 감지
기능.
-fsanitize=부울
이 옵션을 사용하면 bool에서 로드를 계측할 수 있습니다. 0/1 이외의 값인 경우
로드되면 런타임 오류가 발생합니다.
-fsanitize=열거
이 옵션을 사용하면 열거형에서 로드를 계측할 수 있습니다. 값이
enum 유형의 값 범위를 벗어나 로드되면 런타임 오류가 발생합니다.
발행 된.
-fsanitize=vptr
이 옵션은 C++ 멤버 함수 호출, 멤버 액세스의 계측을 활성화합니다.
기본 클래스와 파생 클래스에 대한 포인터 간의 일부 변환을 통해
참조된 개체에 올바른 동적 유형이 있습니다.
DaVinci에는 -ftrapv. 서명된 오버플로에 대한 트랩이 방출되도록 합니다. -fsanitize=정의되지 않음
진단 메시지를 제공합니다. 이것은 현재 C 언어 계열에서만 작동합니다.
-fno-sanitize=모두
이 옵션은 이전에 활성화된 모든 새니타이저를 비활성화합니다. -fsanitize=모두 하지 않습니다
일부 살균제는 함께 사용할 수 없으므로 허용됩니다.
-fasan-그림자 오프셋=번호
이 옵션은 GCC가 AddressSanitizer 검사에서 커스텀 섀도우 오프셋을 사용하도록 합니다. 그것은이다
커널에서 다른 섀도우 메모리 레이아웃을 실험하는 데 유용합니다.
주소세니타이저.
-fsanitize-복구[=선택하지 않는]
-fsanitize-복구= 쉼표에 언급된 새니타이저에 대한 오류 복구 모드를 제어합니다.
분리 된 목록 선택하지 않는. 살균제 구성 요소에 대해 이 옵션을 활성화하면
오류가 발생하지 않은 것처럼 프로그램을 계속 실행하십시오. 이것은 여러
런타임 오류는 단일 프로그램 실행으로 보고될 수 있으며 종료 코드는
프로그램은 오류가 보고된 경우에도 성공을 나타낼 수 있습니다. NS
-fno-위생-복구= 옵션을 사용하여 이 동작을 변경할 수 있습니다.
감지된 오류가 보고되고 프로그램이 XNUMX이 아닌 종료 코드로 종료됩니다.
현재 이 기능은 다음에서만 작동합니다. -fsanitize=정의되지 않음 (및 다음을 제외한 하위 옵션
for -fsanitize=연결 불가 and -fsanitize=반환), -fsanitize=float-cast-overflow,
-fsanitize=XNUMX으로 부동 소수점 나누기 and -fsanitize=커널 주소. 이러한 살균제에 대해
오류 복구는 기본적으로 켜져 있습니다. -fsanitize-recover=모두 and
-fno-sanitize-recover=모두 전자는 모두에 대한 복구를 가능하게 합니다.
지원하는 살균제, 후자는 다음을 지원하는 모든 살균제에 대한 복구를 비활성화합니다.
그것을 지원하십시오.
명시적이지 않은 구문 선택하지 않는 매개변수는 더 이상 사용되지 않습니다. 그것은 동등하다
-fsanitize-recover=정의되지 않음, float-cast-overflow, float-divide-by-zero
비슷하게 -fno-위생-복구 에 해당하는
-fno-sanitize-recover=정의되지 않음,float-cast-overflow,float-divide-XNUMX으로
-fsanitize-정의되지 않은-트랩-오류
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 -fsanitize-정의되지 않은-트랩-오류 옵션은 컴파일러에 보고하도록 지시합니다.
"libubsan" 라이브러리 루틴 대신 "__builtin_trap"을 사용하는 정의되지 않은 동작.
이것의 장점은 "libubsan" 라이브러리가 필요하지 않고 링크되지 않는다는 것입니다.
에 있으므로 독립 환경에서도 사용할 수 있습니다.
-fcheck 포인터 경계
포인터 경계 검사기 계측을 활성화합니다. 각 메모리 참조가 계측됩니다.
관련 경계에 대한 메모리 액세스에 사용되는 포인터 검사
바늘.
현재 Intel MPX에 대한 구현만 사용할 수 있으므로 x86 대상 및
-mmpx 이 기능을 활성화하려면 필요합니다. MPX 기반 계측에는 다음이 필요합니다.
하드웨어에서 MPX를 활성화하고 경계 위반 신호를 처리하는 런타임 라이브러리. 에 의해
기본값 -fcheck 포인터 경계 and -mmpx 옵션은 프로그램을 연결하는 데 사용되며,
GCC 드라이버 링크 libmpx 런타임 라이브러리 및 libmpx 래퍼 도서관. 그것
또한 이 옵션을 지원하는 경우 링커에 '-z bndplt'를 전달합니다(선택
libmpx 구성에서). 이전 버전의 링커는 옵션을 무시할 수 있습니다. 금
링커는 '-z bndplt' 옵션을 지원하지 않습니다. 링커에서 '-z bndplt' 지원 없음
동적 라이브러리에 대한 호출은 전달된 경계를 잃어 전체 보호 수준을 줄입니다. 이것의
'-z bndplt' 지원과 함께 링커를 사용하는 것이 좋습니다. 이러한 링커가 아닌 경우
항상 사용하는 것이 좋습니다. -정적-libmpxwrappers 더 나은 보호를 위해
레벨 또는 사용 -공전 동적 라이브러리에 대한 외부 호출을 완전히 피하기 위해. MPX-
기반 계측은 디버깅에 사용될 수 있으며 프로덕션에 포함될 수도 있습니다.
프로그램 보안을 강화하는 코드. 용도에 따라 다를 수 있습니다
런타임 라이브러리에 대한 요구 사항. MPX 런타임 라이브러리의 현재 버전
디버깅 도구로 사용하기에 더 적합합니다. MPX 런타임 라이브러리 사용은 다음을 의미합니다.
-lpthread. 또한보십시오 -정적-libmpx. 런타임 라이브러리 동작이 영향을 받을 수 있습니다.
다양한 사용 CHKP_RT_* 환경 변수. 보다
<https://gcc.gnu.org/wiki/Intel%20MPX%20support%20in%20the%20GCC%20compiler> 더
세부.
생성된 계측은 다양한 방법으로 제어할 수 있습니다. -fchkp-* 옵션과
"bnd_variable_size" 구조 필드 속성 및 "bnd_legacy" 및 "bnd_instrument"
기능 속성. GCC는 또한 제어를 위한 여러 내장 기능을 제공합니다.
포인터 경계 검사기.
-fchkp-검사-불완전 유형
불완전한 유형의 변수에 대한 포인터 경계 검사를 생성합니다. 에 의해 활성화됨
태만.
-fchkp-좁은 경계
포인터 경계 검사기가 개체 필드에 대한 포인터에 사용하는 경계를 제어합니다. 만약에
축소가 활성화되면 필드 경계가 사용됩니다. 그렇지 않으면 객체 경계가 사용됩니다.
참조 -fchkp-좁은 배열부터 가장 안쪽 배열 and -fchkp-first-field-has-own-bounds.
기본적으로 활성화됩니다.
-fchkp-first-field-has-own-bounds
포인터 경계 검사기가 첫 번째 주소에 대해 좁은 경계를 사용하도록 합니다.
구조의 필드입니다. 기본적으로 첫 번째 필드에 대한 포인터는 동일한 경계를 가집니다.
전체 구조에 대한 포인터로.
-fchkp-좁은 배열부터 가장 안쪽 배열
중첩된 경우 포인터 경계 검사기가 가장 안쪽 배열의 경계를 사용하도록 합니다.
정적 배열 액세스. 기본적으로 이 옵션은 비활성화되어 있으며 가장 바깥쪽
배열이 사용됩니다.
-fchkp-최적화
포인터 경계 검사기 최적화를 활성화합니다. 최적화 시 기본적으로 활성화됨
레벨 -O, -O2, -O3.
-fchkp-use-fast-string-functions
포인터로 *_nobnd 버전의 문자열 함수(경계 복사 안 함)를 사용할 수 있습니다.
경계 검사기. 기본적으로 비활성화되어 있습니다.
-fchkp-use-nochk-문자열 기능
포인터로 *_nochk 버전의 문자열 함수(경계 확인 안 함)를 사용할 수 있습니다.
경계 검사기. 기본적으로 비활성화되어 있습니다.
-fchkp-사용-정적-경계
포인터 경계 검사기가 정적 경계를 유지하는 정적 경계를 생성하도록 허용
변수. 기본적으로 활성화되어 있습니다.
-fchkp-use-static-const-bounds
상수 경계를 각각 생성하는 대신 정적으로 초기화된 경계를 사용합니다.
그들이 필요한 시간. 기본적으로 활성화된 경우 -fchkp-사용-정적-경계 사용 가능합니다.
-fchkp-XNUMX-동적 크기를 무한대로 처리
이 옵션을 사용하면 동적으로 획득한 크기가 XNUMX인 불완전한 유형의 객체
Pointer Bounds Checker 대신 무한 크기로 처리됩니다. 이 옵션
프로그램이 일부에 대한 크기 정보가 누락된 라이브러리와 연결되어 있으면 도움이 될 수 있습니다.
기호. 기본적으로 비활성화되어 있습니다.
-fchkp-체크-읽기
포인터 경계 검사기에 메모리에 대한 모든 읽기 액세스에 대한 검사를 생성하도록 지시합니다.
기본적으로 활성화됩니다.
-fchkp-체크-쓰기
메모리에 대한 모든 쓰기 액세스에 대한 검사를 생성하도록 포인터 경계 검사기에 지시합니다.
기본적으로 활성화됩니다.
-fchkp-저장-경계
포인터 쓰기를 위한 경계 저장소를 생성하도록 포인터 경계 검사기에 지시합니다.
기본적으로 활성화됩니다.
-fchkp-계측기 호출
포인터 경계 검사기가 호출에 포인터 경계를 전달하도록 지시합니다. 기본적으로 활성화되어 있습니다.
-fchkp-기기 표시 전용
포인터 경계 검사기에 다음으로 표시된 기능만 계측하도록 지시합니다.
"bnd_instrument" 속성. 기본적으로 비활성화되어 있습니다.
-fchkp-use-래퍼
포인터 경계 검사기가 내장 함수에 대한 호출을
래퍼 함수. 언제 -fchkp-use-래퍼 프로그램을 연결하는 데 사용되는 GCC 드라이버
자동으로 링크 libmpx 래퍼. 또한보십시오 -정적-libmpxwrappers. 활성화됨
기본적으로
-fdump-최종-insns[=파일]
최종 내부 표현(RTL)을 다음으로 덤프합니다. 파일. 선택적 인수인 경우
생략된 경우(또는 파일 "."), 덤프 파일의 이름은 다음을 추가하여 결정됩니다.
".gkd"를 컴파일 출력 파일 이름으로 바꿉니다.
-fcompare-디버그[=선택하지 않는]
컴파일하는 동안 오류가 발생하지 않으면 컴파일러를 두 번째로 실행하고 다음을 추가합니다. 선택하지 않는 and
-f비교-디버그-초 두 번째 컴파일에 전달된 인수에 덤프
두 컴파일 모두에서 최종 내부 표현이며, 다르면 오류를 인쇄합니다.
등호를 생략하면 기본값 -gttoggle 사용.
환경 변수 GCC_COMPARE_DEBUG, 정의된 경우 비어 있지 않고 XNUMX이 아닙니다.
암시적으로 활성화 -fcompare-디버그. 면 GCC_COMPARE_DEBUG 문자열로 정의
대시로 시작하여 다음 용도로 사용됩니다. 선택하지 않는, 그렇지 않으면 기본값 -gttoggle is
익숙한.
-fcompare-디버그=, 등호는 있지만 제외 선택하지 않는는 다음과 같습니다.
-fno-비교-디버그, 최종 표현의 덤핑을 비활성화하고
두 번째 컴파일, 심지어 방지 GCC_COMPARE_DEBUG 부터.
기간 동안 전체 적용 범위를 확인하려면 -fcompare-디버그 테스트, 설정 GCC_COMPARE_DEBUG to say
-fcompare-debug-재정의되지 않음, GCC는 실제
컴파일(전처리, 어셈블리 또는 연결 대신). 경고만 받으려면
설정 GCC_COMPARE_DEBUG 에 -w%n-f비교 디버그 지원 재정의 할 것이다.
-f비교-디버그-초
이 옵션은 요청된 두 번째 컴파일에 대해 암시적으로 컴파일러에 전달됩니다.
by -fcompare-디버그, 경고를 무음으로 설정하고 다른 옵션을 생략하는 옵션과 함께
파일 또는 표준 출력에 대한 부작용 컴파일러 출력이 발생합니다.
덤프 파일 및 보존된 임시 파일은 ".gk"를 포함하도록 이름이 변경됩니다.
덮어쓰지 않도록 두 번째 컴파일 중 추가 확장
첫 번째에 의해 생성됩니다.
이 옵션이 컴파일러 드라이버에 전달되면 먼저 컴파일
컴파일러를 적절하게 디버깅하는 것 외에는 거의 유용하지 않습니다.
-felimate-dwarf2-dups
에 대한 중복 정보를 제거하여 DWARF 2 디버깅 정보를 압축합니다.
각 기호. 이 옵션은 DWARF 2 디버깅을 생성할 때만 의미가 있습니다.
정보 -gdwarf-2.
-femit-struct-debug-baseonly
기본 이름이
컴파일 소스 파일은 구조체가 정의된 파일의 기본 이름과 일치합니다.
이 옵션은 디버깅 정보의 크기를 상당히 줄여주지만,
디버거에 대한 유형 정보의 상당한 잠재적 손실. 보다
-femit-struct-debug-reduced 덜 공격적인 옵션을 위해. 보다
-femit-struct-debug-detailed 더 자세한 제어를 위해.
이 옵션은 DWARF 2에서만 작동합니다.
-femit-struct-debug-reduced
기본 이름이
컴파일 소스 파일은 유형이 정의된 파일의 기본 이름과 일치합니다.
구조체가 템플릿이거나 시스템 헤더에 정의되어 있지 않는 한.
이 옵션은 디버깅 정보의 크기를 크게 줄입니다.
디버거에 대한 유형 정보의 잠재적 손실. 보다 -femit-struct-debug-baseonly
더 공격적인 옵션을 위해. 보다 -femit-struct-debug-detailed 더 자세한
제어 할 수 있습니다.
이 옵션은 DWARF 2에서만 작동합니다.
-femit-struct-debug-detailed[=사양 목록]
컴파일러가 디버그 정보를 생성하는 구조 유형을 지정하십시오. NS
목적은 서로 다른 개체 파일 간의 중복 구조 디버그 정보를 줄이는 것입니다.
같은 프로그램 내에서.
이 옵션은 -femit-struct-debug-reduced and
-femit-struct-debug-baseonly, 대부분의 요구 사항을 충족합니다.
사양에는 구문이 있습니다[국장 :|인:][주문:|장르 :](어떤|sys|기지|없음)
선택적인 첫 번째 단어는 직접 사용되는 구조체로 사양을 제한합니다.
(국장 :) 또는 간접적으로 사용(인:). 구조체 유형은 유형일 때 직접 사용됩니다.
변수, 멤버. 간접 사용은 구조체에 대한 포인터를 통해 발생합니다. 그건,
불완전한 구조체의 사용이 유효한 경우 사용은 간접적입니다. 예는 구조체
한 직접; 구조체 두 * 간접;.
선택적 두 번째 단어는 사양을 일반 구조체(주문:) 또는
일반 구조체(장르 :). 일반 구조체는 설명하기가 약간 복잡합니다. C++의 경우,
이들은 템플릿 클래스 또는 템플릿이 아닌 클래스의 비명시적 전문화입니다.
위의 범위 내에서. 다른 프로그래밍 언어에는 제네릭이 있지만
-femit-struct-debug-detailed 아직 구현하지 않았습니다.
세 번째 단어는 컴파일러가 해당 구조체에 대한 소스 파일을 지정합니다.
디버그 정보를 내보내야 합니다. 가치 없음 and 어떤 정상적인 의미를 가지고 있습니다. NS
가치 기지 형식 선언이 있는 파일 이름의 기준을 의미합니다.
표시는 기본 컴파일 파일 이름의 기준과 일치해야 합니다. 실제로,
이것은 컴파일 할 때 foo.c, 유형에 대한 디버그 정보가 생성됩니다.
해당 파일에서 선언하고 푸.h, 그러나 다른 헤더 파일은 아닙니다. 가치 sys 방법
만족스러운 유형 기지 또는 시스템 또는 컴파일러 헤더에서 선언됩니다.
응용 프로그램에 가장 적합한 설정을 결정하기 위해 실험해야 할 수도 있습니다.
디폴트는 -femit-struct-debug-detailed=모두.
이 옵션은 DWARF 2에서만 작동합니다.
-fno-병합-디버그-문자열
디버깅 정보의 문자열을 병합하지 않도록 링커에 지시하십시오.
다른 개체 파일에서 동일합니다. 병합은 모든 어셈블러에서 지원되지 않거나
링커. 병합하면 출력 파일의 디버그 정보 크기가 줄어듭니다.
링크 처리 시간 증가 비용. 병합은 기본적으로 활성화되어 있습니다.
-fdebug-접두사-맵=낡은=
디렉토리에서 파일을 컴파일할 때 낡은, 다음과 같이 설명하는 디버깅 정보를 기록합니다.
in 대신.
-fno-dwarf2-cfi-asm
DWARF 2 해제 정보를 사용하는 대신 컴파일러에서 생성한 ".eh_frame" 섹션으로 내보냅니다.
GAS ".cfi_*" 지시문.
-p 분석 프로그램에 적합한 프로파일 정보를 작성하기 위한 추가 코드 생성
교수. 데이터를 원하는 소스 파일을 컴파일할 때 이 옵션을 사용해야 합니다.
링크할 때도 사용해야 합니다.
-페이지 분석 프로그램에 적합한 프로파일 정보를 작성하기 위한 추가 코드 생성
gprof. 데이터를 원하는 소스 파일을 컴파일할 때 이 옵션을 사용해야 합니다.
링크할 때도 사용해야 합니다.
-Q 컴파일러가 컴파일될 때 각 함수 이름을 출력하고 일부를 출력하도록 합니다.
완료 시 각 패스에 대한 통계입니다.
-ftime-보고
컴파일러가 각 패스에서 소비한 시간에 대한 통계를 인쇄하도록 합니다.
마무리합니다.
-fmem 보고서
컴파일러가 영구 메모리 할당에 대한 일부 통계를 인쇄하도록 합니다.
마무리합니다.
-fmem-보고서-wpa
컴파일러가 WPA에 대한 영구 메모리 할당에 대한 일부 통계를 인쇄하도록 합니다.
단계만.
-fpre-ipa-mem-보고서
-fpost-ipa-mem-보고서
컴파일러가 영구 메모리 할당에 대한 일부 통계를 인쇄하거나
절차 간 최적화 후.
-fprofile-보고
컴파일러가 (추정된) 프로필의 일관성에 대한 일부 통계를 인쇄하도록 합니다.
및 개별 패스의 효과.
-fstack-사용
컴파일러가 함수별로 프로그램에 대한 스택 사용 정보를 출력하도록 합니다.
기초. 덤프의 파일 이름은 다음을 추가하여 만듭니다. .su 부터 보조 이름. 보조 이름 is
명시적으로 지정되고 파일이 아닌 경우 출력 파일의 이름에서 생성됩니다.
실행 가능하고 그렇지 않으면 소스 파일의 기본 이름입니다. 항목으로 구성됩니다.
세 필드:
* 함수의 이름.
* 바이트 수.
* 하나 이상의 한정자: "정적", "동적", "제한적".
한정자 "정적"은 함수가 스택을 정적으로 조작한다는 것을 의미합니다.
고정된 수의 바이트가 함수 진입 시 프레임에 할당되고 해제됩니다.
기능 종료; 그렇지 않으면 함수에서 스택 조정이 수행되지 않습니다. 두번째
필드는 이 고정된 바이트 수입니다.
한정자 "동적"은 함수가 스택을 동적으로 조작함을 의미합니다.
위에서 설명한 정적 할당 외에도 스택 조정은
예를 들어 함수 호출 주위에 인수를 푸시/팝하기 위해 함수의 본문을 사용합니다. 만약
한정자 "bounded"도 있는 경우 이러한 조정의 양은 다음으로 제한됩니다.
컴파일 시간이고 두 번째 필드는 사용된 총 스택 양의 상한입니다.
기능으로. 존재하지 않는 경우 이러한 조정의 양은 제한되지 않습니다.
컴파일 타임에 두 번째 필드는 제한된 부분만 나타냅니다.
-fprofile-호
프로그램이 흐를 수 있도록 코드 추가 호 계측됩니다. 프로그램을 실행하는 동안
각 분기 및 호출이 실행된 횟수와 수행된 횟수를 기록합니다.
또는 반환합니다. 컴파일된 프로그램이 종료되면 이 데이터를 라는 파일에 저장합니다.
auxname.gcda 각 소스 파일에 대해 데이터는 프로필 지시에 사용될 수 있습니다.
최적화(-f분기 확률) 또는 테스트 커버리지 분석용
(-최후 범위). 각 오브젝트 파일의 보조 이름 의 이름에서 생성됩니다.
명시적으로 지정되고 최종 실행 파일이 아닌 경우 출력 파일, 그렇지 않으면
소스 파일의 기본 이름입니다. 두 경우 모두 접미사가 제거됩니다(예:
foo.gcda 입력 파일용 디렉토리/foo.c및 디렉토리/foo.gcda 다음과 같이 지정된 출력 파일의 경우 -o
dir/foo.o).
--적용 범위
이 옵션은 커버리지 분석을 위해 계측된 코드를 컴파일하고 링크하는 데 사용됩니다. NS
옵션은 동의어입니다. -fprofile-호 -최후 범위 (컴파일할 때) 그리고 -lgcov
(링크할 때). 자세한 내용은 해당 옵션에 대한 설명서를 참조하십시오.
* 소스 파일을 다음으로 컴파일 -fprofile-호 플러스 최적화 및 코드 생성
옵션. 테스트 커버리지 분석을 위해 추가적인 -최후 범위 옵션을 선택합니다.
프로그램의 모든 소스 파일을 프로파일링할 필요는 없습니다.
* 개체 파일을 다음과 연결합니다. -lgcov or -fprofile-호 (후자는 의미한다.
이전의).
* 대표적인 워크로드에서 프로그램을 실행하여 아크 프로파일 생성
정보. 이것은 여러 번 반복될 수 있습니다. 동시에 실행할 수 있습니다
프로그램의 인스턴스와 파일 시스템이 잠금을 지원하는 경우
데이터 파일이 올바르게 업데이트됩니다. 또한 "포크" 호출이 감지되고
올바르게 처리됩니다(이중 계산은 발생하지 않음).
* 프로필 지향 최적화의 경우 동일한 파일로 소스 파일을 다시 컴파일하십시오.
최적화 및 코드 생성 옵션 플러스 -f분기 확률.
* 테스트 커버리지 분석을 위해 사용 gcov 사람이 읽을 수 있는 정보를 생성하기 위해
전에, .gcno and .gcda 파일. 참조 gcov 추가 문서
정보.
와 -fprofile-호, 프로그램의 각 기능에 대해 GCC는 프로그램 흐름을 만듭니다.
그래프에 대한 스패닝 트리를 찾습니다. 에 없는 호만
스패닝 트리를 계측해야 합니다. 컴파일러는
이 호가 실행되는 횟수입니다. 호가 유일한 출구 또는 유일한 입구일 때
블록, 계측 코드를 블록에 추가할 수 있습니다. 그렇지 않으면 새로운 기본
계측 코드를 보관하려면 블록을 생성해야 합니다.
-최후 범위
메모 파일을 생성하십시오. gcov 코드 적용 유틸리티는 프로그램을 표시하는 데 사용할 수 있습니다.
적용 범위. 각 소스 파일의 메모 파일은 auxname.gcno. 자세한 내용은
-fprofile-호 에 대한 설명은 위의 옵션 보조 이름 및 방법에 대한 지침
테스트 커버리지 데이터를 생성합니다. 적용 범위 데이터는 다음과 같은 경우 소스 파일과 더 가깝게 일치합니다.
당신은 최적화하지 않습니다.
-fdbg-cnt-목록
모든 디버그 카운터의 이름과 카운터 상한을 인쇄합니다.
-fdbg-cnt=반대 가치 목록
내부 디버그 카운터 상한을 설정합니다. 반대 가치 목록 쉼표로 구분된
목록 name:가치 각 디버그 카운터의 상한을 설정하는 쌍 name 에
가치. 모든 디버그 카운터의 초기 상한선은 "UINT_MAX"입니다. 따라서 "dbg_cnt"
이 옵션으로 상한을 설정하지 않는 한 항상 true를 반환합니다. 예를 들어,
-fdbg-cnt=dce:10,tail_call:0, "dbg_cnt(dce)"는 처음 10개에 대해서만 true를 반환합니다.
호출.
-합리적인-종류-패스
-fdisable-종류-패스=범위 목록
이것은 최적화를 명시적으로 비활성화/활성화하는 데 사용되는 옵션 세트입니다.
통과. 이러한 옵션은 GCC 디버깅에 사용하기 위한 것입니다. 컴파일러 사용자는
대신 패스를 활성화/비활성화하는 일반 옵션을 사용하십시오.
-fdisable-ipa-패스
IPA 패스 비활성화 패스. 패스 는 패스 이름입니다. 동일한 패스가 정적으로
컴파일러에서 여러 번 호출되면 패스 이름에
1부터 시작하는 일련번호.
-fdisable-rtl-패스
-fdisable-rtl-패스=범위 목록
RTL 패스 비활성화 패스. 패스 는 패스 이름입니다. 동일한 패스가 정적으로
컴파일러에서 여러 번 호출되면 패스 이름에
1부터 시작하는 일련번호. 범위 목록 는 쉼표로 구분된 목록입니다.
함수 범위 또는 어셈블러 이름. 각 범위는 다음으로 구분된 숫자 쌍입니다.
콜론. 범위는 양쪽 끝을 모두 포함합니다. 범위가 사소한 경우 숫자
쌍을 단일 숫자로 단순화할 수 있습니다. 함수의 호출 그래프 노드가
UID 지정된 범위 중 하나에 해당하는 경우 패스 그것에 대해 비활성화되어 있습니다
함수. 그만큼 UID 덤프 파일의 함수 헤더에 표시되고 패스
옵션을 사용하여 이름을 덤프할 수 있습니다. -fdump-pass.
-fdisable-트리-패스
-fdisable-트리-패스=범위 목록
트리 패스 비활성화 패스. 참조 -fdisable-rtl 옵션 설명을 위해
인수.
-fenable-ipa-패스
IPA 패스 사용 패스. 패스 는 패스 이름입니다. 동일한 패스가 정적으로
컴파일러에서 여러 번 호출되면 패스 이름에
1부터 시작하는 일련번호.
-가능-rtl-패스
-가능-rtl-패스=범위 목록
RTL 패스 활성화 패스. 참조 -fdisable-rtl 옵션 인수 설명 및
예.
-가는 나무-패스
-가는 나무-패스=범위 목록
트리 패스 사용 패스. 참조 -fdisable-rtl 옵션 인수에 대한 설명입니다.
다음은 이러한 옵션의 사용을 보여주는 몇 가지 예입니다.
# 모든 기능에 대해 ccp1 비활성화
-fdisable-tree-ccp1
# cgraph 노드 uid가 1인 함수에 대해 완전한 언롤을 비활성화합니다.
-fenable-tree-cunroll=1
# 다음 범위 [2]에서 기능에 대해 gcse1,1를 비활성화합니다.
# [300,400] 및 [400,1000]
# foo 및 foo2 기능에 대해 gcse2 비활성화
-fdisable-rtl-gcse2=푸,푸2
# 초기 인라인 비활성화
-fdisable-tree-einline
# ipa 인라이닝 비활성화
-fdisable-ipa-inline.
# 트리 전체 언롤 활성화
-fenable-트리-펼치기
-d편지
-fdump-rtl-패스
-fdump-rtl-패스=파일 이름
다음에서 지정한 시간에 컴파일하는 동안 디버깅 덤프를 만들라고 말합니다. 편지. 이
컴파일러의 RTL 기반 패스를 디버깅하는 데 사용됩니다. 대부분의 파일 이름
덤프는 패스 번호와 단어를 추가하여 만들어집니다. 덤프 이름및
파일은 출력 파일의 디렉토리에 생성됩니다. 의 경우 =파일 이름 선택권,
덤프는 패스 번호가 매겨진 덤프 파일 대신 지정된 파일에서 출력됩니다. 메모
패스가 패스에 등록될 때 패스 번호가 정적으로 계산됩니다.
관리자. 따라서 번호 매기기는 동적 실행 순서와 관련이 없습니다.
통과. 특히 플러그인에 의해 설치된 패스는 200개 이상의 숫자를 가질 수 있습니다.
그것이 아주 일찍 실행된다면. 덤프 이름 출력 파일의 이름에서 생성되며,
명시적으로 지정되고 실행 파일이 아닌 경우, 그렇지 않으면 기본 이름입니다.
소스 파일. 이러한 스위치는 다음과 같은 경우 다른 효과를 가질 수 있습니다. -E ~에 사용됩니다.
전처리.
디버그 덤프는 다음을 사용하여 활성화할 수 있습니다. -fdump-rtl 스위치 또는 일부 -d option 편지. 이리
에 사용할 수 있는 문자는 패스 and 편지, 그리고 그 의미:
-fdump-rtl-정렬
분기 정렬이 계산된 후 덤프합니다.
-fdump-rtl-asmcons
in/out 제약 조건이 충족되지 않은 rtl 문을 수정한 후 덤프합니다.
-fdump-rtl-auto_inc_dec
auto-inc-dec 검색 후 덤프합니다. 이 패스는 다음과 같은 아키텍처에서만 실행됩니다.
auto inc 또는 auto dec 명령이 있습니다.
-fdump-rtl-장벽
배리어 지침을 정리한 후 덤프하십시오.
-fdump-rtl-bbpart
핫 및 콜드 기본 블록을 분할한 후 덤프합니다.
-fdump-rtl-bbro
블록 재정렬 후 덤프.
-fdump-rtl-btl1
-fdump-rtl-btl2
-fdump-rtl-btl1 and -fdump-rtl-btl2 두 분기 대상 뒤에 덤핑 활성화
로드 최적화를 통과합니다.
-fdump-rtl-바이패스
점프 우회 및 제어 흐름 최적화 후 덤프.
-fdump-rtl-결합
RTL 명령어 조합 통과 후 덤프합니다.
-fdump-rtl-compgotos
계산된 goto를 복제한 후 덤프합니다.
-fdump-rtl-ce1
-fdump-rtl-ce2
-fdump-rtl-ce3
-fdump-rtl-ce1, -fdump-rtl-ce2및 -fdump-rtl-ce3 세 후 덤핑 활성화
변환이 통과하는 경우.
-fdump-rtl-cprop_hardreg
하드 레지스터 복사 전파 후 덤프.
-fdump-rtl-csa
스택 조정을 결합한 후 덤프합니다.
-fdump-rtl-cse1
-fdump-rtl-cse2
-fdump-rtl-cse1 and -fdump-rtl-cse2 두 공통 후 덤핑 활성화
하위 표현식 제거를 통과합니다.
-fdump-rtl-dce
독립 실행형 데드 코드 제거를 통과한 후 덤프합니다.
-fdump-rtl-dbr
지연된 분기 스케줄링 후 덤프.
-fdump-rtl-dce1
-fdump-rtl-dce2
-fdump-rtl-dce1 and -fdump-rtl-dce2 두 개의 죽은 저장소 후 덤핑 활성화
제거 통과.
-fdump-rtl-eh
EH 처리 코드 완료 후 덤프합니다.
-fdump-rtl-eh_ranges
EH 처리 범위 영역 변환 후 덤프.
-fdump-rtl-확장
RTL 생성 후 덤프.
-fdump-rtl-fwprop1
-fdump-rtl-fwprop2
-fdump-rtl-fwprop1 and -fdump-rtl-fwprop2 두 앞으로 덤핑 활성화
전파 통과.
-fdump-rtl-gcse1
-fdump-rtl-gcse2
-fdump-rtl-gcse1 and -fdump-rtl-gcse2 전역 공통 후 덤핑 활성화
하위 표현 제거.
-fdump-rtl-init-regs
레지스터 초기화 후 덤프합니다.
-fdump-rtl-초기화
초기 값 세트 계산 후 덤프합니다.
-fdump-rtl-into_cfglayout
cfglayout 모드로 변환한 후 덤프합니다.
-fdump-rtl-ira
레지스터 할당을 반복한 후 덤프합니다.
-fdump-rtl-점프
두 번째 점프 최적화 후 덤프합니다.
-fdump-rtl-loop2
-fdump-rtl-loop2 rtl 루프 최적화가 통과한 후 덤핑을 활성화합니다.
-fdump-rtl-마하
시스템 종속 재구성 단계를 수행한 후 덤프(해당 패스인 경우)
존재합니다.
-fdump-rtl-mode_sw
중복 모드 스위치를 제거한 후 덤프합니다.
-fdump-rtl-rnreg
레지스터 번호 다시 매기기 후 덤프.
-fdump-rtl-outof_cfglayout
cfglayout 모드에서 변환한 후 덤프합니다.
-fdump-rtl-peephole2
엿보는 구멍 통과 후 덤프.
-fdump-rtl-postreload
다시 로드 후 최적화 후 덤프합니다.
-fdump-rtl-pro_and_epilogue
함수 프롤로그 및 에필로그를 생성한 후 덤프합니다.
-fdump-rtl-sched1
-fdump-rtl-sched2
-fdump-rtl-sched1 and -fdump-rtl-sched2 기본 블록 이후에 덤핑 활성화
일정 패스.
-fdump-rtl-리
부호/제로 확장 제거 후 덤프.
-fdump-rtl-seqabstr
공통 시퀀스 검색 후 덤프합니다.
-fdump-rtl-단축
가지를 줄인 후 덤프하십시오.
-fdump-rtl-형제
형제 호출 최적화 후 덤프.
-fdump-rtl-split1
-fdump-rtl-split2
-fdump-rtl-split3
-fdump-rtl-split4
-fdump-rtl-split5
이 옵션을 사용하면 XNUMX번의 명령어 분할 후 덤핑이 가능합니다.
-fdump-rtl-sms
모듈로 스케줄링 후 덤프. 이 패스는 일부 아키텍처에서만 실행됩니다.
-fdump-rtl-스택
GCC의 "플랫 레지스터 파일" 레지스터에서 x87 레지스터로 변환 후 덤프
스택형 레지스터 이 패스는 x86 변형에서만 실행됩니다.
-fdump-rtl-subreg1
-fdump-rtl-subreg2
-fdump-rtl-subreg1 and -fdump-rtl-subreg2 두 하위 등록 뒤에 덤핑 활성화
확장 패스.
-fdump-rtl-공유 해제
모든 rtl이 공유 해제된 후 덤프합니다.
-fdump-rtl-vartrack
변수 추적 후 덤프.
-fdump-rtl-vregs
가상 레지스터를 하드 레지스터로 변환한 후 덤프합니다.
-fdump-rtl-웹
라이브 범위 분할 후 덤프.
-fdump-rtl-regclass
-fdump-rtl-subregs_of_mode_init
-fdump-rtl-subregs_of_mode_finish
-fdump-rtl-dfinit
-fdump-rtl-dfinish
이러한 덤프는 정의되지만 항상 빈 파일을 생성합니다.
-in
-fdump-rtl-모두
위에 나열된 모든 덤프를 생성합니다.
-dA 기타 디버깅 정보로 어셈블러 출력에 주석을 답니다.
-dD 전처리가 끝날 때 일반적인 매크로 정의 외에 모든 매크로 정의를 덤프합니다.
출력.
-dH 오류가 발생할 때마다 코어 덤프를 생성합니다.
-dp 어셈블러 출력에 어떤 패턴과
대안이 사용됩니다. 각 명령의 길이도 인쇄됩니다.
-dP 각 명령어 앞에 주석으로 어셈블러 출력의 RTL을 덤프합니다. 또한
켜다 -dp 주석.
-dx 컴파일하는 대신 함수에 대한 RTL을 생성하기만 하면 됩니다. 일반적으로 함께 사용
-fdump-rtl-확장.
-fdump-noaddr
디버깅 덤프를 수행할 때 주소 출력을 억제합니다. 이를 통해 보다 실현 가능한
다른 컴파일러 바이너리를 사용하여 컴파일러 호출을 위한 디버깅 덤프에 diff 사용
및/또는 다른 텍스트/bss/데이터/힙/스택/dso 시작 위치.
-freport-버그
C/C++ 컴파일러에서 ICE인 경우 디버그 정보를 수집하여 임시 파일에 덤프합니다.
발생했습니다.
-fdump-번호 없음
디버깅 덤프를 수행할 때 명령 번호와 주소 출력을 억제합니다. 이것
컴파일러 호출에 대한 디버깅 덤프에서 diff를 사용하는 것이 더 적합합니다.
특히 유무에 관계없이 다양한 옵션 -g.
-fdump-unnumbered-링크
디버깅 덤프를 수행할 때(참조 -d 위의 옵션)에 대한 명령 번호를 억제합니다.
시퀀스의 이전 및 다음 명령에 대한 링크입니다.
-fdump-번역-단위 (C++만 해당)
-fdump-번역-단위-옵션 (C++만 해당)
전체 번역 단위에 대한 트리 구조 표현을 파일로 덤프합니다.
파일 이름은 다음을 추가하여 만들어집니다. .tu 소스 파일 이름으로, 파일은
출력 파일과 동일한 디렉토리에 생성됩니다. 만약 -옵션 형태가 사용되며,
옵션 에 대해 설명된 대로 덤프의 세부 정보를 제어합니다. -fdump-트리 옵션을 제공합니다.
-fdump-클래스-계층 구조 (C++만 해당)
-fdump-클래스-계층 구조-옵션 (C++만 해당)
각 클래스의 계층 구조 및 가상 기능 테이블 레이아웃의 표현을 다음으로 덤프합니다.
파일. 파일 이름은 다음을 추가하여 만들어집니다. .수업 소스 파일 이름 및 파일
출력 파일과 동일한 디렉토리에 생성됩니다. 만약 -옵션 형태가 사용되며,
옵션 에 대해 설명된 대로 덤프의 세부 정보를 제어합니다. -fdump-트리 옵션을 제공합니다.
-fdump-ipa-스위치
절차간 분석 언어 트리의 다양한 단계에서 덤핑을 제어하여
파일. 파일 이름은 소스에 스위치 특정 접미사를 추가하여 생성됩니다.
파일 이름을 입력하고 파일은 출력 파일과 동일한 디렉토리에 생성됩니다. NS
다음 덤프가 가능합니다.
모든 모든 절차 간 분석 덤프를 활성화합니다.
c그래프
호출 그래프 최적화, 사용하지 않는 함수 제거 및
인라인 결정.
인라인
함수 인라이닝 후 덤프.
-fdump-pass
현재 설정 및 해제된 최적화 패스 목록을 덤프합니다.
명령줄 옵션.
-fdump-통계-option
별도의 파일에서 통과 통계 덤핑을 활성화하고 제어합니다. 파일 이름은
로 끝나는 접미사를 추가하여 생성 .통계 소스 파일 이름에
파일은 출력 파일과 동일한 디렉토리에 생성됩니다. 만약 -option 형태는
익숙한, -통계 카운터가 전체 컴파일 단위에 대해 합산되도록 합니다.
-세부 패스가 생성할 때 모든 이벤트를 덤프합니다. 옵션이 없는 기본값은
컴파일된 각 함수에 대한 카운터를 합산합니다.
-fdump-트리-스위치
-fdump-트리-스위치-옵션
-fdump-트리-스위치-옵션=파일 이름
중간 언어 트리를 처리하는 다양한 단계에서 덤핑을 제어하여
파일. 파일 이름은 스위치별 접미사를 추가하여 생성됩니다.
소스 파일 이름이고 파일은 출력 파일과 동일한 디렉토리에 생성됩니다. 에
~의 경우 =파일 이름 옵션을 선택하면 자동 대신 지정된 파일에 덤프가 출력됩니다.
명명된 덤프 파일. 만약 -옵션 형태가 사용되며, 옵션 목록입니다 - 구분
덤프의 세부 사항을 제어하는 옵션. 모든 옵션이 모든 옵션에 적용되는 것은 아닙니다.
우울; 의미가 없는 것은 무시됩니다. 다음 옵션을 사용할 수 있습니다.
주소
각 노드의 주소를 출력하십시오. 일반적으로 이것은 변경되기 때문에 의미가 없습니다.
환경 및 소스 파일에 따라. 주요 용도는 묶는 것입니다.
디버그 환경이 있는 덤프 파일.
이름
지정된 Decl에 대해 "DECL_ASSEMBLER_NAME"이 설정된 경우 덤프에서 사용하십시오.
"DECL_NAME" 대신. 주요 용도는
어셈블리 파일의 맹글링된 이름.
날씬한
프론트엔드 중간 표현을 덤핑할 때 멤버의 덤핑을 금지합니다.
범위에 도달했기 때문에 함수의 범위 또는 본문. 오직
다른 경로로 직접 도달할 수 있는 경우 이러한 항목을 덤프하십시오.
예쁘게 인쇄된 나무를 덤핑할 때 이 옵션은 나무의 몸체를 덤핑하는 것을 방지합니다.
제어 구조.
RTL을 덤핑할 때 RTL을 기본값이 아닌 슬림(축약) 형태로 출력
LISP와 유사한 표현.
살갗이 벗어 진 나무의 원시 표현을 인쇄합니다. 기본적으로 나무는 예쁘게 인쇄됩니다.
C와 같은 표현.
세부설명
더 자세한 덤프를 활성화합니다(모든 덤프 옵션에서 적용되지 않음). 또한 포함
최적화 패스의 정보입니다.
통계
패스에 대한 다양한 통계 덤핑 활성화(모든 덤프에서 적용되지 않음
선택권).
블록
기본 블록 경계 표시를 활성화합니다(원시 덤프에서는 비활성화됨).
그래프
표시된 다른 덤프 파일 각각에 대해(-fdump-rtl-패스), 덤프
GraphViz로 보기에 적합한 제어 흐름 그래프 표현
파일.passid.pass.dot. 파일의 각 기능은 하위 그래프로 예쁘게 인쇄되어 있습니다.
GraphViz가 단일 플롯에서 모두 렌더링할 수 있도록 합니다.
이 옵션은 현재 RTL 덤프에만 작동하며 RTL은 항상 다음 위치에 덤프됩니다.
슬림한 형태.
밥
모든 명령문에 대해 가상 피연산자를 표시하도록 설정합니다.
리노
명령문의 줄 번호 표시를 활성화합니다.
UID 각 변수에 대해 고유 ID("DECL_UID") 표시를 활성화합니다.
말 수가 많은
각 문에 대한 트리 덤프 표시를 활성화합니다.
eh 각 문을 포함하는 EH 지역 번호를 표시하도록 설정합니다.
scev
스칼라 진화 분석 세부 정보 표시를 활성화합니다.
최적화
최적화 정보 표시를 활성화합니다(특정 패스에서만 사용 가능).
놓친
누락된 최적화 정보 표시를 활성화합니다(특정 패스에서만 사용 가능).
주의
기타 세부 최적화 정보를 활성화합니다(특정 패스에서만 사용 가능).
=파일 이름
자동 명명된 덤프 파일 대신 지정된 파일 이름으로 출력합니다. 파일
이름 표준 출력 and 표준 오류 특별히 취급되며 이미 열린 것으로 간주됩니다.
표준 스트림. 예를 들어,
gcc -O2 -ftree-Vectorize -fdump-tree-vect-blocks=foo.dump
-fdump-tree-pre=stderr 파일.c
벡터라이저 덤프를 출력 푸.덤프, PRE 덤프가 출력되는 동안 표준 오류.
동일한 패스에 대해 충돌하는 두 개의 덤프 파일 이름이 제공된 경우 후자는
옵션은 이전 옵션보다 우선합니다.
모든 다음을 제외한 모든 옵션을 켭니다. 살갗이 벗어 진, 날씬한, 말 수가 많은 and 리노.
옵탈
모든 최적화 옵션을 켭니다. 즉, 최적화, 놓친및 주의.
다음 트리 덤프가 가능합니다.
실물
트리 기반 최적화 전에 덤프, 파일.원본.
최적화
모든 트리 기반 최적화 후 덤프, 파일 최적화.
김프
gimplification이 파일로 전달되기 전후에 각 함수를 덤프합니다. 파일
이름은 추가하여 만들어집니다. .gimple 소스 파일 이름으로.
cfg 각 함수의 제어 흐름 그래프를 파일로 덤프합니다. 파일 이름은
첨부 .cfg 소스 파일 이름으로.
ch 루프 헤더를 복사한 후 각 함수를 덤프합니다. 파일 이름은 다음을 추가하여 만들어집니다.
.ch 소스 파일 이름으로.
SSA 파일에 SSA 관련 정보를 덤프합니다. 파일 이름은 다음을 추가하여 만들어집니다. .ssa
소스 파일 이름으로.
별명
각 함수에 대한 별칭 정보를 덤프합니다. 파일 이름은 다음을 추가하여 만들어집니다.
.별명 소스 파일 이름으로.
ccp CCP 후에 각 함수를 덤프하십시오. 파일 이름은 다음을 추가하여 만들어집니다. .ccp 부터
소스 파일 이름.
storeccp
STORE-CCP 후에 각 함수를 덤프하십시오. 파일 이름은 다음을 추가하여 만들어집니다. .storeccp
소스 파일 이름으로.
사전 부분 중복 제거 후 트리를 덤프합니다. 파일 이름은
첨부 .pre 소스 파일 이름으로.
fre 완전한 중복 제거 후 나무를 버립니다. 파일 이름은 다음을 추가하여 만들어집니다.
.fre 소스 파일 이름으로.
카피프롭
복사 전파 후 트리를 덤프합니다. 파일 이름은 다음을 추가하여 만들어집니다. .copyprop
소스 파일 이름으로.
store_copyprop
저장소 복사 전파 후 트리를 덤프합니다. 파일 이름은 다음을 추가하여 만들어집니다.
.store_copyprop 소스 파일 이름으로.
디시 데드 코드 제거 후 각 함수를 덤프합니다. 파일 이름은
첨부 .dce 소스 파일 이름으로.
미스터 / Ms 집계의 스칼라 교체를 수행한 후 각 함수를 덤프합니다. 파일
이름은 추가하여 만들어집니다. .sra 소스 파일 이름으로.
싱크대
코드 싱킹을 수행한 후 각 함수를 덤프합니다. 파일 이름은
첨부 .싱크대 소스 파일 이름으로.
DOM 도미네이터 트리 최적화를 적용한 후 각 함수를 덤프합니다. 파일 이름은
추가하여 만든 .돔 소스 파일 이름으로.
말하다 데드 스토어 제거를 적용한 후 각 함수를 덤프합니다. 파일명이 만들어진다
추가하여 .dse 소스 파일 이름으로.
피옵트
PHI 노드를 직선 코드로 최적화한 후 각 함수를 덤프합니다. 파일
이름은 추가하여 만들어집니다. .phiopt 소스 파일 이름으로.
전진
단일 사용 변수를 전달한 후 각 함수를 덤프합니다. 파일 이름
추가하여 만들어집니다 .forwprop 소스 파일 이름으로.
카피 이름 바꾸기
복사본 이름 바꾸기 최적화를 적용한 후 각 함수를 덤프합니다. 파일 이름은
추가하여 만든 .카피 이름 바꾸기 소스 파일 이름으로.
nrv 제네릭에 명명된 반환 값 최적화를 적용한 후 각 함수 덤프
나무. 파일 이름은 다음을 추가하여 만들어집니다. .nrv 소스 파일 이름으로.
벡터
루프의 벡터화를 적용한 후 각 함수를 덤프합니다. 파일명이 만들어진다
추가하여 .벡트 소스 파일 이름으로.
슬랩 기본 블록의 벡터화를 적용한 후 각 함수를 덤프합니다. 파일 이름은
추가하여 만든 .SLP 소스 파일 이름으로.
VRP 값 범위 전파(VRP) 후 각 함수를 덤프합니다. 파일 이름은
첨부 .vrp 소스 파일 이름으로.
모든 이 옵션에 제공된 플래그로 사용 가능한 모든 트리 덤프를 활성화합니다.
-fopt-정보
-fopt-정보-옵션
-fopt-정보-옵션=파일 이름
다양한 최적화 단계에서 최적화 덤프를 제어합니다. 만약 -옵션 형태는
익숙한, 옵션 목록입니다 - 덤프 세부 정보를 선택하고
최적화.
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 옵션 두 그룹으로 나눌 수 있습니다. 자세한 내용을 설명하는 옵션
덤프 및 포함되어야 하는 최적화를 설명하는 옵션. 의 옵션
두 그룹은 겹치지 않으므로 자유롭게 혼합할 수 있습니다. 다만, 다음의 경우
충돌이 발생하면 이후 옵션이 명령줄의 이전 옵션보다 우선 적용됩니다.
다음 옵션은 덤프 상세도를 제어합니다.
최적화
최적화가 성공적으로 적용되면 정보를 인쇄합니다. 합격까지입니다
어떤 정보가 관련이 있는지 결정합니다. 예를 들어 벡터라이저는 인쇄를 전달합니다.
성공적으로 벡터화된 루프의 소스 위치.
놓친
놓친 최적화에 대한 정보를 인쇄합니다. 개별 패스 제어
출력에 포함할 정보입니다.
주의
특정 변환과 같은 최적화에 대한 자세한 정보를 인쇄합니다.
결정 등에 대한 자세한 메시지
모든 자세한 최적화 정보를 인쇄합니다. 여기에는 다음이 포함됩니다. 최적화, 놓친및
주의.
다음 옵션 키워드 중 하나 이상을 사용하여 그룹을 설명할 수 있습니다.
최적화:
IPA 모든 절차 간 최적화에서 덤프를 활성화합니다.
고리
모든 루프 최적화에서 덤프를 활성화합니다.
인라인
모든 인라인 최적화에서 덤프를 활성화합니다.
VEC 모든 벡터화 최적화에서 덤프를 활성화합니다.
옵탈
모든 최적화에서 덤프를 활성화합니다. 이것은 최적화 그룹의 상위 집합입니다.
위에 나열된.
If 옵션 생략하면 기본적으로 최적화된 광학, 이는 모든 정보를 덤프하는 것을 의미합니다.
모든 패스에서 성공적인 최적화에 대해 설명합니다.
경우 파일 이름 제공되는 경우 적용 가능한 모든 최적화의 덤프는 다음과 같습니다.
에 연결 파일 이름. 그렇지 않으면 덤프가 다음으로 출력됩니다. 표준 오류. 그래도
여러 -fopt-정보 옵션이 허용되며 그 중 하나만 포함할 수 있습니다. 파일 이름. 면
다른 파일 이름이 제공되면 첫 번째 옵션을 제외한 모든 옵션이 무시됩니다.
참고로 출력 파일 이름 번역 단위가 여러 개인 경우 덮어씁니다. 만약에
여러 번역 단위의 결합된 출력이 필요하며, 표준 오류 사용되어야한다
대신.
다음 예에서 최적화 정보는 다음으로 출력됩니다. 표준 오류:
gcc -O3 -fopt-정보
이 예:
gcc -O3 -fopt-info-missed=missed.all
모든 패스에서 누락된 최적화 보고서를 출력합니다. 놓쳤다.모두, 그리고 이것:
gcc -O2 -ftree-벡터화 -fopt-info-vec-missed
벡터화 패스에서 놓친 최적화 기회에 대한 정보를 인쇄합니다.
on 표준 오류. 그 주 -fopt-정보-vec-놓친 에 해당하는 -fopt-정보-놓친-vec.
또 다른 예로,
gcc -O3 -fopt-info-inline-optimized-missed=inline.txt
누락된 최적화 및 모든 최적화된 위치에 대한 정보를 출력합니다.
인라이닝은 다음으로 전달됩니다. 인라인.txt.
마지막으로 다음을 고려하십시오.
gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt
여기에 두 개의 출력 파일 이름이 있습니다. 벡.미스 and 루프.옵션 하나뿐이므로 충돌합니다.
출력 파일이 허용됩니다. 이 경우 첫 번째 옵션만 적용되고
후속 옵션은 무시됩니다. 따라서 만 벡.미스 덤프를 포함하는 생산
놓친 기회에 대한 벡터라이저에서.
-임의의 시드=번호
이 옵션은 GCC가 생성할 때 난수 대신 사용하는 시드를 제공합니다.
모든 컴파일된 파일에서 달라야 하는 특정 기호 이름. 그것은 또한
적용 범위 데이터 파일 및 생성하는 개체 파일에 고유한 스탬프를 배치하는 데 사용
그들을. 당신은 사용할 수 있습니다 -임의의 종자 재현 가능하게 동일한 개체를 생성하는 옵션
파일.
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 번호 컴파일하는 모든 파일에 대해 달라야 합니다.
-fsched-상세=n
명령 스케줄링을 사용하는 대상에서 이 옵션은
스케쥴러가 출력하는 디버깅 출력. 이 정보는 표준 오류에 기록되며,
...을 제외하면 -fdump-rtl-sched1 or -fdump-rtl-sched2 지정된 경우 출력됩니다.
일반적인 덤프 목록 파일에 .sched1 or .sched2 각기. 그러나 n
XNUMX보다 크면 출력은 항상 표준 오류로 인쇄됩니다.
럭셔리 n XNUMX보다 큰, -fsched-verbose 와 같은 정보를 출력
-fdump-rtl-sched1 and -fdump-rtl-sched2. 용 n XNUMX보다 크면 기본도 출력합니다.
블록 확률, 자세한 준비 목록 정보 및 유닛/숙소 정보. 을위한 n
XNUMX보다 크면 중단 지점의 RTL, 제어 흐름 및 영역 정보가 포함됩니다. 그리고
for n XNUMX개 이상, -fsched-verbose 종속성 정보도 포함됩니다.
- 임시 저장
- 임시 저장 = cwd
일반적인 "임시" 중간 파일을 영구적으로 저장합니다. 현재에 배치
디렉토리를 만들고 소스 파일을 기반으로 이름을 지정합니다. 따라서 컴파일 foo.c 과 -c
- 임시 저장 파일을 생성 푸아이 and 푸.에스, 만큼 잘 푸.오. 이것은
전처리 푸아이 컴파일러가 이제 일반적으로
통합 전처리기.
와 함께 사용시 -x 명령줄 옵션, - 임시 저장 현명하다
확장자가 동일한 입력 소스 파일을 덮어쓰는 것을 방지하기에 충분합니다.
중간 파일. 해당 중간 파일은 이름을 변경하여 얻을 수 있습니다.
사용하기 전에 소스 파일 - 임시 저장.
GCC를 병렬로 호출하는 경우 공유하는 여러 다른 소스 파일을 컴파일합니다.
다른 서브디렉토리의 공통 기본 이름 또는 다음을 위해 컴파일된 동일한 소스 파일
여러 출력 대상이 있는 경우 서로 다른 병렬 컴파일러가
서로 간섭하고 임시 파일을 덮어씁니다. 예를 들어:
gcc -save-temps -o outdir1/foo.o indir1/foo.c&
gcc -save-temps -o outdir2/foo.o indir2/foo.c&
발생할 수 있습니다 푸아이 and 푸.오 두 컴파일러에서 동시에 작성됩니다.
- 임시 저장 = obj
일반적인 "임시" 중간 파일을 영구적으로 저장합니다. 만약 -o 옵션을 사용하고,
임시 파일은 개체 파일을 기반으로 합니다. 만약 -o 옵션을 사용하지 않는 경우
- 임시 저장 = obj 스위치는 다음과 같이 작동합니다. - 임시 저장.
예 :
gcc -save-temps=obj -c foo.c
gcc -save-temps=obj -c bar.c -o 디렉토리/xbar.o
gcc -save-temps=obj foobar.c -o dir2/yfoobar
생성 푸아이, 푸.에스, 디렉토리/xbar.i, 디렉토리/xbar.s, dir2/yfoobar.i, dir2/yfoobar.s및
dir2/yfoobar.o.
-시각[=파일]
컴파일 순서에서 각 하위 프로세스가 소요한 CPU 시간을 보고합니다. C의 경우
소스 파일, 이것은 적절한 컴파일러 및 어셈블러입니다(링크가
완료).
출력 파일을 지정하지 않으면 출력은 다음과 같습니다.
# CC1 0.12 0.01
# 0.00 0.01
각 줄의 첫 번째 숫자는 "사용자 시간", 즉 실행에 소요된 시간입니다.
프로그램 자체. 두 번째 숫자는 "시스템 시간"으로 운영 실행에 소요된 시간입니다.
프로그램 대신 시스템 루틴. 두 숫자 모두 초 단위입니다.
출력 파일의 지정으로 출력은 명명된 파일에 추가되고,
그리고 다음과 같이 보입니다 :
0.12 0.01cc1
0.00 0.01 그대로
"사용자 시간"과 "시스템 시간"은 프로그램 이름 앞에 이동하고
프로그램에 전달된 옵션이 표시되므로 나중에 파일이 무엇인지 알 수 있습니다.
컴파일 중이며 어떤 옵션을 사용합니다.
-fvar 추적
변수 추적 패스를 실행합니다. 각 위치에서 변수가 저장된 위치를 계산합니다.
코드에서. 그러면 더 나은 디버깅 정보가 생성됩니다(디버깅 정보가
형식이 이 정보를 지원함).
최적화(- 오스, -O, -O2, ...),
디버깅 정보(-g) 디버그 정보 형식이 이를 지원합니다.
-fvar-추적 할당
컴파일 초기에 사용자 변수에 대한 주석을 달고 수행을 시도합니다.
시도에서 끝까지 컴파일 전체에 걸쳐 주석
최적화하는 동안 디버그 정보를 개선합니다. 사용 -gdwarf-4 함께 권장됩니다
그것에.
var-tracking이 비활성화된 경우에도 활성화될 수 있습니다. 이 경우 주석은
생성 및 유지되지만 결국 폐기됩니다. 기본적으로 이 플래그는 활성화되어 있습니다.
와 함께 -fvar 추적, 선택적 스케줄링이 활성화된 경우를 제외하고.
-fvar-추적-할당-전환
전환 -fvar-추적 할당같은 방식으로 -gttoggle 토글하다 -g.
-인쇄 파일 이름=도서관
라이브러리 파일의 전체 절대 이름 인쇄 도서관 그 때 사용됩니다
연결 --- 다른 작업을 수행하지 마십시오. 이 옵션을 사용하면 GCC가 컴파일하거나 링크하지 않습니다.
아무것; 그것은 단지 파일 이름을 인쇄합니다.
- 인쇄 다중 디렉토리
다른 스위치에서 선택한 multilib에 해당하는 디렉토리 이름을 인쇄합니다.
명령줄에 있습니다. 이 디렉토리는 다음 위치에 있어야 합니다. GCC_EXEC_PREFIX.
-print-multi-lib
multilib 디렉토리 이름에서 이를 활성화하는 컴파일러 스위치로의 매핑을 인쇄합니다.
디렉토리 이름은 다음으로 스위치와 구분됩니다. ;, 각 스위치는
@ 대신에 -, 여러 스위치 사이에 공백이 없습니다. 이것은
쉘 처리를 용이하게 합니다.
-print-multi-os-디렉토리
일부를 기준으로 선택한 multilib에 대한 OS 라이브러리 경로를 인쇄합니다. lib
하위 디렉토리. OS 라이브러리가 lib 하위 디렉토리 및 다중 라이브러리 없음
이것은 일반적으로 그냥 ., OS 라이브러리가 에 있는 경우 libsuffix 형제
예를 들어 인쇄하는 디렉토리 ../lib64, ../ lib or ../lib32, 또는 OS 라이브러리가
에 존재 라이브러리/하위 디렉토리 예를 들어 인쇄하는 하위 디렉토리 amd64, 스파크v9 or ev6.
-인쇄 멀티아크
일부를 기준으로 선택한 멀티아크의 OS 라이브러리 경로를 인쇄합니다. lib
하위 디렉토리.
-인쇄 프로그램 이름=프로그램
처럼 -인쇄 파일 이름, 하지만 다음과 같은 프로그램을 검색합니다. CPP.
-print-libgcc-파일 이름
과 동일 -인쇄 파일 이름=libgcc.a.
사용할 때 유용합니다. -nostdlib or -nodefaultlibs 하지만 당신은 연결하고 싶어
libgcc.a. 넌 할 수있어:
gcc -nostdlib ... `gcc -print-libgcc-파일 이름`
-인쇄-검색-디렉토리
구성된 설치 디렉토리의 이름과 프로그램 목록을 인쇄하고
라이브러리 디렉토리 GCC 검색 --- 다른 작업을 수행하지 마십시오.
이것은 다음과 같은 경우에 유용합니다. GCC 오류 메시지를 인쇄합니다 설치 문제, 임원
cpp0: 아니 이러한 파일 or 예배 규칙서. 이 문제를 해결하려면 다음 중 하나를 입력해야 합니다. cpp0 그리고
다른 컴파일러 구성 요소 GCC 찾을 것으로 예상하거나 설정할 수 있습니다.
환경 변수 GCC_EXEC_PREFIX 설치한 디렉토리로 이동합니다. 하지마
후행을 잊어 /.
-인쇄-sysroot
컴파일 중에 사용되는 대상 sysroot 디렉터리를 인쇄합니다. 이것이
구성 시 또는 다음을 사용하여 지정된 대상 sysroot --sysroot 선택권,
컴파일 옵션에 따라 추가 접미사가 붙을 수 있습니다. 대상이 없는 경우
sysroot가 지정되면 옵션은 아무 것도 인쇄하지 않습니다.
-인쇄-sysroot-헤더-접미사
헤더를 검색할 때 대상 sysroot에 추가된 접미사를 인쇄하거나
컴파일러가 이러한 접미사로 구성되지 않은 경우 오류가 발생하고 아무 작업도 수행하지 않습니다.
그밖에.
- 덤프 머신
컴파일러의 대상 머신을 인쇄합니다(예: i686-pc-리눅스-gnu) ---하지 마십시오
다른 것.
-덤프 버전
컴파일러 버전(예: 3.0)을 인쇄하고 다른 작업은 수행하지 마십시오.
-덤프 사양
컴파일러의 내장 사양을 인쇄하고 다른 작업은 하지 마십시오. (이것은 다음과 같은 경우에 사용됩니다.
GCC 자체가 구축 중입니다.)
-fno-제거-unused-debug-types
일반적으로 DWARF 2 출력을 생성할 때 GCC는 디버그 기호 출력 생성을 피합니다.
컴파일되는 소스 파일에서 어디에도 사용되지 않는 유형. 가끔은 유용하다
GCC가 컴파일 단위에 선언된 모든 유형에 대한 디버깅 정보를 내보내도록 하려면,
해당 컴파일 단위에서 실제로 사용되는지 여부에 관계없이
예를 들어 디버거에서 실제로는 아닌 유형으로 값을 캐스트하려는 경우
프로그램에서 사용됩니다(그러나 선언됨). 그러나 더 자주 이로 인해
상당한 양의 낭비되는 공간.
옵션 그 Control 최적화
이러한 옵션은 다양한 종류의 최적화를 제어합니다.
최적화 옵션이 없으면 컴파일러의 목표는 컴파일 비용을 줄이는 것입니다.
디버깅을 통해 예상한 결과를 얻을 수 있습니다. 명령문은 독립적입니다.
명령문 사이에 중단점으로 프로그램을 중지한 다음 새 값을 할당할 수 있습니다.
임의의 변수를 사용하거나 프로그램 카운터를 함수의 다른 명령문으로 변경하고
소스 코드에서 기대하는 결과와 정확히 일치합니다.
최적화 플래그를 켜면 컴파일러가 성능 및/또는
컴파일 시간과 디버그 기능을 희생하는 코드 크기
프로그램)
컴파일러는 프로그램에 대한 지식을 기반으로 최적화를 수행합니다.
한 번에 여러 파일을 단일 출력 파일 모드로 컴파일하면 컴파일러에서 다음을 사용할 수 있습니다.
각 파일을 컴파일할 때 모든 파일에서 얻은 정보.
모든 최적화가 플래그에 의해 직접 제어되는 것은 아닙니다. 다음이 있는 최적화만
플래그는 이 섹션에 나열됩니다.
대부분의 최적화는 다음과 같은 경우에만 활성화됩니다. -O 레벨은 명령줄에서 설정됩니다. 그렇지 않으면
개별 최적화 플래그가 지정된 경우에도 비활성화됩니다.
대상 및 GCC 구성 방법에 따라 약간 다른 집합
최적화는 각각에서 활성화될 수 있습니다 -O 여기에 나열된 것보다 수준이 높습니다. GCC를 호출할 수 있습니다.
과 -Q --help=최적화기 활성화된 정확한 최적화 세트를 찾으려면
각 수준.
-O
-O1 최적화 컴파일을 최적화하는 데 시간과 메모리가 더 많이 소요됩니다.
큰 기능.
와 -O, 컴파일러는 수행하지 않고 코드 크기와 실행 시간을 줄이려고 합니다.
컴파일 시간이 많이 걸리는 최적화.
-O 다음 최적화 플래그를 켭니다.
-fauto-inc-dec -fbranch-count-reg -fcombin-stack-adjustments -f비교-제거
-fcprop 레지스터 -fdce -fdefer-팝 -fdelayed-분기 -fdse -앞으로 전파
-fguess-분기 확률 -fi-변환2 -fif 변환
-finline-functions-call-once -fipa-순수-const -fipa 프로필 -fipa-참조
-fmerge-상수 -fmove-loop-불변 -fshrink-wrap -fsplit-와이드 유형
-ftree-bit-ccp -fttree-ccp -fssa-phiopt -fttree-ch -ftree 복사 소품 -ftree-copy이름 바꾸기
-fttree-dce -ftree-지배자-opts -fttree-dse -fttree-forwprop -fttree-fre -fttree-phiprop
-ftree-싱크대 -fttree-slsr -fttree-sra -fttree-pta -fttree-ter -한 번에 단위
-O 도 켜집니다 -fomit 프레임 포인터 그렇게 하는 것이 방해가 되지 않는 기계에서
디버깅과 함께.
-O2 더욱 최적화하십시오. GCC는 지원하지 않는 거의 모든 최적화를 수행합니다.
공간 속도 절충안을 포함합니다. 비교하자면 -O, 이 옵션은
컴파일 시간과 생성된 코드의 성능.
-O2 에 의해 지정된 모든 최적화 플래그를 켭니다. -O. 또한 다음을 켭니다.
최적화 플래그: -fthread 점프 -falign-함수 -정렬 점프 -정렬 루프
-falign-라벨 -fcaller 저장 -크로스점프 -fcse-추종-점프 -fcse-skip-blocks.
-fdelete-null-포인터 검사 -f비가상화 -fdevirtualize-추측적으로
-비싼 최적화 -fgcse -fgcse-lm -fhoist-인접 하중
-finline-작은 기능 -findirect 인라인 -fipa-cp -fipa-cp-정렬 -피파-스라
-fipa-icf -분리-오류-경로-역참조 -fla-remat -foptimize-형제 호출
-foptimize-strlen -f부분 인라인 -fpeephole2 -freorder-블록
-freeorder-blocks-and-partition -freorder-함수 -frerun-cse-후-루프
-fsched-인터블록 -fsched-spec -fschedule-insns -fschedule-insns2 -fstrict-앨리어싱
-fstrict-오버플로 -ftree-내장 호출-dce -ftree 스위치 변환 -fttree-tail-merge
-fttree-pre -fttree-vrp -피파라
아래의 경고에 유의하십시오. -fgcse 호출에 대해 -O2 계산을 사용하는 프로그램에서
고토스.
참고: Ubuntu 8.10 이상 버전에서는 -D_FORTIFY_SOURCE=2 기본적으로 설정되어 있으며
활성화되면 -O 2 이상으로 설정됩니다. 이것은 추가 컴파일 시간을 가능하게 하고
여러 libc 함수에 대한 런타임 검사. 비활성화하려면 다음 중 하나를 지정하십시오.
-U_FORTIFY_SOURCE or -D_FORTIFY_SOURCE=0.
-O3 더 최적화하세요. -O3 에 의해 지정된 모든 최적화를 켭니다. -O2 또한 켜집니다
전에, -finline-함수, -펀스위치 루프, -f예측-공통, -fgcse-재로드 후,
-ftree 루프 벡터화, -ftree-루프-배포-패턴, -ftree-slp-벡터화,
-fvect-비용 모델, -ftree-부분 사전 and -fipa-cp-클론 옵션을 제공합니다.
-O0 컴파일 시간을 줄이고 디버깅을 통해 예상한 결과를 얻을 수 있습니다. 이것이
태만.
- 오스 크기에 최적화하십시오. - 오스 모두 활성화 -O2 일반적으로 증가하지 않는 최적화
코드 크기. 또한 코드 크기를 줄이기 위해 설계된 추가 최적화를 수행합니다.
- 오스 다음 최적화 플래그를 비활성화합니다. -falign-함수 -정렬 점프
-정렬 루프 -falign-라벨 -freorder-블록 -freeorder-blocks-and-partition
-fprefetch 루프 배열
-오파스트
엄격한 표준 준수를 무시하십시오. -오파스트 모두 활성화 -O3 최적화. 또한
모든 표준 호환 프로그램에 유효하지 않은 최적화를 활성화합니다. 그것
켜다 -빠른 수학 그리고 포트란 전용 -fno 보호 괄호 and -fstack-배열.
-오그 디버깅 경험을 최적화합니다. -오그 방해하지 않는 최적화를 가능하게 합니다.
디버깅. 표준 편집을 위해 선택한 최적화 수준이어야 합니다.
유지하면서 합리적인 수준의 최적화를 제공하는 컴파일-디버그 주기
빠른 컴파일과 좋은 디버깅 경험.
여러 개 사용하는 경우 -O 옵션, 레벨 번호 유무에 관계없이 마지막 옵션은
효과적인 것.
양식의 옵션 -f플래그 기계 독립적 플래그를 지정합니다. 대부분의 플래그에는 두 가지가 모두 있습니다.
긍정적이고 부정적인 형태; 의 부정적인 형태 - 푸푸 is -fno-foo. 아래 표에서,
일반적으로 사용하는 양식 중 하나만 나열됩니다. 당신은 다른 것을 알아낼 수 있습니다
제거하여 형성 아니 - 또는 추가합니다.
다음 옵션은 특정 최적화를 제어합니다. 그들은 다음 중 하나에 의해 활성화됩니다. -O
옵션 또는 해당 옵션과 관련이 있습니다. 희귀한 경우 다음 플래그를 사용할 수 있습니다.
수행할 최적화의 "미세 조정"이 필요한 경우.
-fno-지연-팝
함수가 반환되는 즉시 각 함수 호출에 대한 인수를 항상 팝업합니다. 을위한
함수 호출 후 인수를 팝해야 하는 시스템에서 컴파일러는 일반적으로 다음을 허용합니다.
인수는 여러 함수 호출에 대해 스택에 누적되어 모두 다음 위치에 표시됩니다.
일단.
수준에서 비활성화됨 -O, -O2, -O3, - 오스.
-앞으로 전파
RTL에서 순방향 전파 전달을 수행합니다. 패스는 두 가지 명령을 결합하려고 합니다.
결과를 단순화할 수 있는지 확인합니다. 루프 언롤링이 활성화된 경우 XNUMX회 통과
수행되고 두 번째는 루프 언롤링 후에 예약됩니다.
이 옵션은 최적화 수준에서 기본적으로 활성화되어 있습니다. -O, -O2, -O3, - 오스.
-ffp-계약=스타일
-ffp-계약=해제 부동 소수점 표현식 축소를 비활성화합니다. -ffp-계약=빠른
fused multi-add의 형성과 같은 부동소수점 표현 축약 가능
대상에 기본 지원이 있는 경우 작업. -ffp-계약=켜기 수
언어 표준에서 허용하는 경우 부동 소수점 표현식 축소. 이것은
현재 구현되지 않고 동등하게 취급됨 -ffp-계약=해제.
디폴트는 -ffp-계약=빠른.
-fomit 프레임 포인터
프레임 포인터가 필요하지 않은 함수의 레지스터에 프레임 포인터를 보관하지 마십시오. 이것
프레임 포인터를 저장, 설정 및 복원하라는 지시를 피합니다. 그것은 또한 만든다
많은 기능에서 사용할 수 있는 추가 레지스터. It 또한 브랜드 디버깅 불가능한 on
일부 기계.
VAX와 같은 일부 시스템에서는 이 플래그가 효과가 없습니다.
호출 시퀀스는 자동으로 프레임 포인터를 처리하고 아무 것도 저장되지 않습니다.
존재하지 않는 척. 기계 설명 매크로 "FRAME_POINTER_REQUIRED"
대상 머신이 이 플래그를 지원하는지 여부를 제어합니다.
32비트 GNU/Linux x86 및 32비트의 기본 설정(크기 최적화가 아닌 경우)
다윈 x86 타겟은 -fomit 프레임 포인터. 다음을 사용하여 GCC를 구성할 수 있습니다.
--enable-프레임 포인터 옵션을 구성하여 기본값을 변경합니다.
수준에서 활성화됨 -O, -O2, -O3, - 오스.
-foptimize-형제 호출
형제 및 꼬리 재귀 호출을 최적화합니다.
수준에서 활성화됨 -O2, -O3, - 오스.
-foptimize-strlen
다양한 표준 C 문자열 기능(예: "strlen", "strchr" 또는 "strcpy")을 최적화하고
더 빠른 대안으로 "_FORTIFY_SOURCE" 대응합니다.
수준에서 활성화됨 -O2, -O3.
-fno 인라인
"always_inline"으로 표시된 기능 외에 인라인 기능을 확장하지 마십시오.
기인하다. 최적화하지 않을 때의 기본값입니다.
단일 함수는 "noinline"으로 표시하여 인라인에서 제외할 수 있습니다.
속성을 사용하지 않는 것입니다.
-finline-작은 기능
본문이 예상보다 작을 때 호출자에 함수를 통합합니다.
함수 호출 코드(그래서 프로그램의 전체 크기가 작아짐). 컴파일러
통합할 가치가 있을 만큼 간단한 기능을 발견적으로 결정합니다.
이 방법. 이 인라인은 인라인으로 선언되지 않은 함수를 포함하여 모든 함수에 적용됩니다.
수준에서 활성화됨 -O2.
-findirect 인라인
인라인은 또한 다음 덕분에 컴파일 타임에 알려진 간접 호출입니다.
이전 인라이닝. 이 옵션은 인라인 자체가 켜져 있을 때만 효과가 있습니다.
로 -finline-함수 or -finline-작은 기능 옵션을 제공합니다.
수준에서 활성화됨 -O2.
-finline-함수
인라인으로 선언되지 않은 경우에도 모든 함수를 인라인으로 고려하십시오. NS
컴파일러는 이러한 방식으로 통합할 가치가 있는 기능을 경험적으로 결정합니다.
주어진 함수에 대한 모든 호출이 통합되고 함수가 선언된 경우
"정적"인 경우 함수는 일반적으로 자체적으로 어셈블러 코드로 출력되지 않습니다.
수준에서 활성화됨 -O3.
-finline-functions-call-once
다음과 같은 경우에도 호출자에 인라인하기 위해 한 번 호출된 모든 "정적" 함수를 고려하십시오.
"인라인"으로 표시되지 않습니다. 주어진 함수에 대한 호출이 통합되면
함수는 자체적으로 어셈블러 코드로 출력되지 않습니다.
수준에서 활성화됨 -O1, -O2, -O3 and - 오스.
-두려운 인라인
"always_inline"으로 표시된 인라인 함수 및 본문이 다음보다 작게 보이는 함수
하기 전에 일찍 함수 호출 오버헤드 -fprofile 생성 계측 및
실제 인라인 패스. 이렇게 하면 프로파일링이 상당히 저렴해지고 일반적으로
중첩된 래퍼 함수의 큰 체인이 있는 프로그램에서 더 빠르게 인라인합니다.
기본적으로 활성화됩니다.
-피파-스라
집계의 절차 간 스칼라 교체 수행, 사용하지 않는 매개변수 제거
참조로 전달된 매개변수를 값으로 전달된 매개변수로 교체합니다.
수준에서 활성화됨 -O2, -O3 and - 오스.
-finline-한계=n
기본적으로 GCC는 인라인될 수 있는 함수의 크기를 제한합니다. 이 플래그는
이 한계의 거친 제어. n 인라인할 수 있는 함수의 크기입니다.
의사 명령어의 수.
인라인은 실제로 지정될 수 있는 여러 매개변수에 의해 제어됩니다.
사용하여 개별적으로 --매개변수 name=가치. 그만큼 -finline-한계=n 옵션은 일부를 설정합니다.
이러한 매개변수는 다음과 같습니다.
최대 인라인-insns-단일
가 n/ 2.
최대 인라인-insns-자동
가 n/ 2.
인라인을 제어하는 개별 매개변수에 대한 문서는 아래를 참조하십시오.
이러한 매개변수의 기본값에 대해
참고 : 가치가 없을 수 있습니다 -finline-한계 기본 동작이 발생합니다.
참고 : 의사 명령어는 이 특정 컨텍스트에서 추상을 나타냅니다.
함수의 크기 측정. 어떤 식으로든 어셈블리 수를 나타내지 않습니다.
지침이 있으므로 정확한 의미는 릴리스마다 변경될 수 있습니다.
또 다른.
-fno-keep-inline-dllexport
더 세분화된 버전입니다. -fkeep 인라인 함수에만 적용되는
"dllexport" 속성 또는 declspec을 사용하여 선언된 함수
-fkeep 인라인 함수
C에서 "인라인"으로 선언된 "정적" 함수를 개체 파일에 내보냅니다.
함수는 모든 호출자에 인라인되었습니다. 이 스위치는 영향을 미치지 않습니다
GNU C90에서 "extern inline" 확장을 사용하는 기능. C++에서 모든 것을 내보냅니다.
인라인 함수를 개체 파일에 넣습니다.
-fkeep-static-const
최적화가 켜져 있지 않으면 "정적 const"로 선언된 변수를 내보냅니다.
변수는 참조되지 않습니다.
GCC는 기본적으로 이 옵션을 활성화합니다. 컴파일러가 강제로 확인하도록 하려면
최적화가 켜져 있는지 여부에 관계없이 변수가 참조됩니다.
전에, -fno-keep-static-consts 옵션을 선택합니다.
-fmerge-상수
동일한 상수(문자열 상수 및 부동 소수점 상수) 병합 시도
컴파일 단위에 걸쳐.
이 옵션은 어셈블러와 링커가
그것을 지원하십시오. 사용하다 -fno-merge-상수 이 행동을 억제하기 위해.
수준에서 활성화됨 -O, -O2, -O3, - 오스.
-fmerge-all-상수
동일한 상수와 동일한 변수를 병합하려고 합니다.
이 옵션은 -fmerge-상수. 이외에 -fmerge-상수 이
예를 들어 상수 초기화 배열 또는 초기화 상수 변수를 다음과 같이 고려합니다.
정수 또는 부동 소수점 유형. C 또는 C++와 같은 언어에는 각 변수가 필요합니다.
재귀 호출에 동일한 변수의 여러 인스턴스를 포함하여 고유한
따라서 이 옵션을 사용하면 부적합한 동작이 발생합니다.
-fmodulo-sched
첫 번째 스케줄링 패스 직전에 스윙 모듈로 스케줄링을 수행합니다. 이것
pass는 가장 안쪽 루프를 살펴보고 서로 다른 루프를 겹쳐서 명령을 재정렬합니다.
반복.
-fmodulo-sched-allow-regmoves
레지스터 이동이 허용되는 보다 적극적인 SMS 기반 모듈로 스케줄링을 수행합니다. 에 의해
이 플래그를 설정하면 특정 반의존성 에지가 삭제되어 트리거됩니다.
수명 범위 분석을 기반으로 하는 reg-moves 생성. 이 옵션은 유효합니다
~ 만 -fmodulo-sched 사용하도록 설정되었습니다.
-fno-브랜치-카운트-reg
카운트 레지스터에 "감소 및 분기" 명령을 사용하지 말고 대신
레지스터를 감소시키는 일련의 명령어를 생성하고 비교
XNUMX이고 결과에 따라 분기합니다. 이 옵션은 다음에서만 의미가 있습니다.
x86, PowerPC, IA-64 및
S/390.
기본적으로 활성화됨 -O1 이상.
디폴트는 -fbranch-count-reg.
-fno-기능-cse
레지스터에 함수 주소를 넣지 마십시오. 호출하는 각 명령을
상수 함수는 함수의 주소를 명시적으로 포함합니다.
이 옵션을 사용하면 코드 효율성이 떨어지지만
어셈블러 출력은 이 옵션이 있을 때 수행되는 최적화로 인해 혼동될 수 있습니다.
사용되지 않습니다.
디폴트는 -f함수-cse
-fno-zero-initialized-in-bss
대상이 BSS 섹션을 지원하는 경우 GCC는 기본적으로 다음과 같은 변수를 넣습니다.
BSS에 XNUMX으로 초기화됩니다. 이렇게 하면 결과 코드의 공간을 절약할 수 있습니다.
일부 프로그램은 명시적으로 변수에 의존하기 때문에 이 옵션은 이 동작을 끕니다.
데이터 섹션으로 이동 --- 예를 들어 결과 실행 파일이 찾을 수 있도록
해당 섹션의 시작 부분 및/또는 이를 기반으로 가정합니다.
디폴트는 -fzero-초기화-BSS.
-fthread 점프
점프가 다른 위치로 분기되는지 확인하는 최적화를 수행합니다.
첫 번째로 포함된 비교가 발견됩니다. 그렇다면 첫 번째 분기는 다음으로 리디렉션됩니다.
두 번째 분기의 목적지 또는 바로 다음 지점,
조건이 참인지 거짓인지에 따라 다릅니다.
수준에서 활성화됨 -O2, -O3, - 오스.
-fsplit-와이드 유형
32비트에서 "long long"과 같이 여러 레지스터를 차지하는 유형을 사용하는 경우
시스템에서 레지스터를 분리하고 독립적으로 할당합니다. 이것은 일반적으로
이러한 유형에 대해 더 나은 코드를 생성하지만 디버깅을 더 어렵게 만들 수 있습니다.
수준에서 활성화됨 -O, -O2, -O3, - 오스.
-fcse-추종-점프
CSE(공통 부분식 제거)에서 점프 명령어를 스캔하면
점프의 목표는 다른 경로에 의해 도달되지 않습니다. 예를 들어 CSE가
"else" 절이 있는 "if" 문, CSE는 조건이 다음과 같을 때 점프를 따릅니다.
테스트한 것은 거짓입니다.
수준에서 활성화됨 -O2, -O3, - 오스.
-fcse-skip-blocks.
이것은 다음과 유사합니다. -fcse-추종-점프, 그러나 CSE가 다음 점프를 따르도록 합니다.
조건부로 블록을 건너뜁니다. CSE가 없는 단순한 "if" 문을 만나면
else 절, -fcse-skip-blocks. CSE는 몸 주위의 점프를 따라갑니다.
"만약".
수준에서 활성화됨 -O2, -O3, - 오스.
-frerun-cse-후-루프
루프 최적화가 수행된 후 공통 하위 표현식 제거를 다시 실행하십시오.
수준에서 활성화됨 -O2, -O3, - 오스.
-fgcse
전역 공통 부분식 제거 단계를 수행합니다. 이 패스도 수행합니다.
전역 상수 및 복사 전파.
참고 : GCC 확장인 계산된 gotos를 사용하여 프로그램을 컴파일할 때 다음을 얻을 수 있습니다.
전역 공통 하위 표현식 제거를 비활성화하면 런타임 성능 향상
추가하여 통과 -FNO-GCSE 명령 줄에.
수준에서 활성화됨 -O2, -O3, - 오스.
-fgcse-lm
인셀덤 공식 판매점인 -fgcse-lm 활성화되면 전역 공통 하위 표현식 제거가 이동하려고 시도합니다.
상점에 의해서만 죽임을 당하는 부하. 이것은 다음을 포함하는 루프를 허용합니다.
루프 외부의 로드로 변경되는 로드/저장 시퀀스 및 루프 내 복사/저장
루프.
다음과 같은 경우 기본적으로 활성화됨 -fgcse 사용 가능합니다.
-fgcse-sm
인셀덤 공식 판매점인 -fgcse-sm 활성화되면 전역 공통 이후에 스토어 모션 패스가 실행됩니다.
하위 표현 제거. 이 패스는 저장소를 루프 밖으로 이동하려고 시도합니다. 사용시
와 함께 -fgcse-lm, 로드/저장 시퀀스가 포함된 루프를 변경할 수 있습니다.
루프 이전에 로드하고 루프 이후에 저장합니다.
어떤 최적화 수준에서도 활성화되지 않습니다.
-fgcse-las
인셀덤 공식 판매점인 -fgcse-las 활성화되면 전역 공통 하위 표현식 제거 패스
동일한 메모리 위치(둘 다
부분 및 전체 중복).
어떤 최적화 수준에서도 활성화되지 않습니다.
-fgcse-재로드 후
인셀덤 공식 판매점인 -fgcse-재로드 후 활성화되면 중복 로드 제거 패스가 수행됩니다.
재장전 후. 이 패스의 목적은 중복 유출을 정리하는 것입니다.
- faggressive-loop-optimizations
이 옵션은 루프 옵티마이저가 언어 제약 조건을 사용하여
루프의 반복 횟수. 이것은 루프 코드가
예를 들어 부호 있는 정수 오버플로 또는 범위를 벗어나는 정의되지 않은 동작
배열 액세스. 루프의 반복 횟수에 대한 경계는 다음을 안내하는 데 사용됩니다.
루프 풀기 및 필링 및 루프 종료 테스트 최적화. 이 옵션이 활성화되었습니다
기본적으로
-펀세이프 루프 최적화
이 옵션은 루프 옵티마이저가 루프 인덱스가 오버플로되지 않는다고 가정하고
중요하지 않은 종료 조건이 있는 루프는 무한하지 않습니다. 이를 통해 더 넓은
루프 최적화 프로그램 자체가 다음을 증명할 수 없는 경우에도 루프 최적화 범위
가정이 유효합니다. 사용하는 경우 -Wunsafe 루프 최적화, 컴파일러가 경고합니다.
이런 종류의 루프를 찾으면.
-크로스점프
크로스 점프 변환을 수행합니다. 이 변환은 동등한 코드를 통합하고
코드 크기를 절약합니다. 결과 코드는 교차가 없는 것보다 더 나은 성능을 보일 수도 있고 그렇지 않을 수도 있습니다.
점프.
수준에서 활성화됨 -O2, -O3, - 오스.
-fauto-inc-dec
메모리 액세스와 주소의 증가 또는 감소를 결합합니다. 이 패스는
이를 지원하기 위한 지침이 없는 아키텍처에서는 항상 건너뛰었습니다.
기본적으로 활성화됨 -O 그리고 이것을 지원하는 아키텍처에서 더 높습니다.
-fdce
RTL에서 데드 코드 제거(DCE)를 수행합니다. 기본적으로 활성화됨 -O 이상.
-fdse
RTL에서 데드 스토어 제거(DSE)를 수행합니다. 기본적으로 활성화됨 -O 이상.
-fif 변환
조건부 점프를 분기가 없는 등가물로 변환하려고 시도합니다. 여기에는 다음이 포함됩니다.
조건부 이동, 최소, 최대, 플래그 및 복근 설정 지침 및 몇 가지 트릭 사용
표준 산술로 할 수 있습니다. 칩에서 조건부 실행 사용
사용 가능한 제어 -fi-변환2.
수준에서 활성화됨 -O, -O2, -O3, - 오스.
-fi-변환2
조건부 실행(사용 가능한 경우)을 사용하여 조건부 점프를 다음으로 변환합니다.
가지가 없는 등가물.
수준에서 활성화됨 -O, -O2, -O3, - 오스.
-fdeclone-ctor-dtor
C++ ABI에는 생성자와 소멸자에 대한 여러 진입점이 필요합니다.
기본 하위 개체, 하나는 완전한 개체용이고 하나는 호출하는 가상 소멸자용입니다.
연산자는 나중에 삭제합니다. 가상 기반이 있는 계층의 경우 기본 및 전체
변형은 기능의 두 복사본을 의미하는 클론입니다. 이 옵션을 사용하면
기본 및 전체 변형은 공통 구현을 호출하는 썽크로 변경됩니다.
에 의해 활성화됨 - 오스.
-fdelete-null-포인터 검사
프로그램이 널 포인터를 안전하게 역참조할 수 없고 코드나 데이터가 없다고 가정합니다.
요소가 거기에 있습니다. 이를 통해 간단한 일정한 접기 최적화가 가능합니다.
최적화 수준. 또한 GCC의 다른 최적화 단계에서는 이 플래그를 사용하여
널 포인터에 대한 불필요한 검사를 제거하는 전역 데이터 흐름 분석을 제어합니다.
이것은 포인터가 이미 역참조된 후에 검사되면
null일 수 없습니다.
그러나 일부 환경에서는 이 가정이 사실이 아닙니다. 사용하다
-fno-delete-null-포인터 검사 의존하는 프로그램에 대해 이 최적화를 비활성화하려면
그 행동에.
일부 대상, 특히 포함된 대상은 모든 수준에서 이 옵션을 비활성화합니다. 그렇지 않으면
모든 수준에서 활성화됩니다. -O0, -O1, -O2, -O3, - 오스. 정보를 사용하는 패스
다른 최적화 수준에서 독립적으로 활성화됩니다.
-f비가상화
가상 함수에 대한 호출을 직접 호출로 변환하려고 시도합니다. 이것은 둘 다 이루어집니다
절차 내에서 간접 인라인의 일부로 절차 간
(-findirect 인라인) 및 절차 간 상수 전파(-fipa-cp). 활성화 시간
레벨 -O2, -O3, - 오스.
-fdevirtualize-추측적으로
가상 함수에 대한 호출을 투기적 직접 호출로 변환하려고 시도합니다. 기반으로
유형 상속 그래프의 분석, 주어진 호출에 대한 집합 결정
가능성이 있는 표적. 집합이 작은 경우, 바람직하게는 크기가 1인 경우 호출을 다음으로 변경합니다.
직접 및 간접 호출 사이의 조건부 결정. 투기적 호출은
인라인과 같은 더 많은 최적화. 그들이 더 이상 쓸모 없어 보일 때
최적화, 그들은 원래 형태로 다시 변환됩니다.
-fdevirtualize-at-ltrans
링크를 실행할 때 적극적인 탈가상화에 필요한 추가 정보를 스트리밍하십시오.
로컬 변환 모드의 시간 최적화기. 이 옵션은 더 많은
그러나 스트리밍 데이터의 크기가 크게 증가합니다. 이를 위해
기본적으로 비활성화되어 있기 때문입니다.
-비싼 최적화
비교적 비용이 많이 드는 여러 가지 사소한 최적화를 수행합니다.
수준에서 활성화됨 -O2, -O3, - 오스.
-비어 있는
중복 확장 명령을 제거하려고 시도합니다. 이것은 특히 도움이 됩니다.
x86-64 아키텍처, 64비트 레지스터에서 암시적으로 XNUMX 확장
하위 32비트 절반에 쓰기.
레벨에서 Alpha, AArch64 및 x86에 대해 활성화됨 -O2, -O3, - 오스.
-fno-수명-dse
C++에서 개체의 값은 수명 내 변경에 의해서만 영향을 받습니다.
생성자가 시작되고 객체가 불확실한 값을 가지며
객체의 수명은 객체가 파괴될 때 죽습니다. 보통 죽은 가게
제거는 이것을 이용할 것입니다. 코드가 다음 값에 의존하는 경우
객체의 수명 이후에도 객체 스토리지가 지속되는 경우 이 플래그를 사용하여
이 최적화를 비활성화하십시오.
- 플라이 레인지 수축
레지스터 라이브 범위 축소를 통해 레지스터 압력을 줄이려고 시도합니다. 이것은
작거나 중간 크기의 레지스터 세트가 있는 고속 프로세서에 유용합니다.
-피라 알고리즘=연산
통합 레지스터 할당자에 대해 지정된 색상 지정 알고리즘을 사용합니다. NS
연산 주장은 수 있습니다 우선, Chow의 우선 순위 색상 지정, 또는 CB,
Chaitin-Briggs 착색을 지정합니다. Chaitin-Briggs 착색이 구현되지 않았습니다.
모든 아키텍처에 대해 지원하지만 이를 지원하는 대상의 경우 기본값입니다.
더 나은 코드를 생성하기 때문입니다.
-피라 지역=지방
통합 레지스터 할당자에 대해 지정된 영역을 사용합니다. NS 지방 논의
다음 중 하나여야 합니다.
모든 모든 루프를 레지스터 할당 영역으로 사용하십시오. 이것은 최고의 결과를 줄 수 있습니다
작거나 불규칙한 레지스터 세트가 있는 기계.
혼합 된
영역으로 레지스터 압력이 작은 루프를 제외한 모든 루프를 사용합니다. 이것
값은 일반적으로 대부분의 경우 대부분의 아키텍처에서 최상의 결과를 제공합니다.
속도 최적화(-O, -O2, ...).
한 모든 기능을 단일 영역으로 사용합니다. 이것은 일반적으로 가장 작은 코드를 생성합니다.
크기이며 기본적으로 활성화되어 있습니다. - 오스 or -O0.
-피라-호이스트-압력
IRA를 사용하여 호이스트 결정을 위한 코드 호이스팅 패스의 레지스터 압력 평가
표현. 이 옵션을 사용하면 일반적으로 코드가 작아지지만 속도가 느려질 수 있습니다.
컴파일러 다운.
이 옵션은 수준에서 활성화됩니다. - 오스 모든 대상에 대해.
-피라 루프 압력
IRA를 사용하여 루프 불변량을 이동하기 위한 결정에 대한 루프의 레지스터 압력을 평가합니다.
이 옵션은 일반적으로 다음을 사용하는 시스템에서 더 빠르고 더 작은 코드를 생성합니다.
큰 레지스터 파일(>= 32 레지스터)이지만 컴파일러가 느려질 수 있습니다.
이 옵션은 수준에서 활성화됩니다. -O3 일부 대상에 대해.
-fno-ira-공유-저장-슬롯
호출 사용 하드 레지스터를 저장하는 데 사용되는 스택 슬롯 공유 비활성화
전화. 각 하드 레지스터는 별도의 스택 슬롯을 가지며 결과적으로 함수 스택
프레임이 더 큽니다.
-fno-ira-share-spill-slots
의사 레지스터에 할당된 스택 슬롯의 공유를 비활성화합니다. 각 의사 레지스터
하드 레지스터를 얻지 못하는 것은 별도의 스택 슬롯을 가져오고 결과적으로 함수
스택 프레임이 더 큽니다.
-Fira-장황한=n
통합 레지스터 할당자에 대한 덤프 파일의 자세한 정도를 제어합니다. NS
기본값은 5입니다. 값이 n 10보다 크거나 같으면 덤프 출력이 전송됩니다.
와 같은 형식을 사용하여 stderr로 n 마이너스 10.
-fla-remat
LRA에서 CFG에 민감한 재구체화를 활성화합니다. 유출된 값을 로드하는 대신
의사, LRA는 수익성이 있는 경우 값을 재구현(재계산)하려고 합니다.
수준에서 활성화됨 -O2, -O3, - 오스.
-fdelayed-분기
대상 시스템에 대해 지원되는 경우 악용할 명령을 재정렬하십시오.
지연 분기 명령 이후에 사용 가능한 명령 슬롯.
수준에서 활성화됨 -O, -O2, -O3, - 오스.
-fschedule-insns
대상 시스템에 대해 지원되는 경우 명령을 재정렬하여 제거하십시오.
필요한 데이터를 사용할 수 없기 때문에 실행이 중단됩니다. 이것은 다음을 수행하는 기계를 돕습니다.
다른 명령어를 허용하여 느린 부동 소수점 또는 메모리 로드 명령어를
로드 또는 부동 소수점 명령어의 결과가 필요할 때까지 발행됩니다.
수준에서 활성화됨 -O2, -O3.
-fschedule-insns2
유사하게 -fschedule-insns, 그러나 명령 스케줄링의 추가 단계를 요청합니다.
레지스터 할당이 완료된 후. 이것은 특히 다음이 있는 기계에서 유용합니다.
상대적으로 적은 수의 레지스터와 메모리 로드 명령이
한 사이클.
수준에서 활성화됨 -O2, -O3, - 오스.
-fno-sched-인터블록
기본 블록 전체에 지침을 예약하지 마십시오. 이것은 일반적으로 기본적으로 활성화되어 있습니다.
레지스터 할당 전에 스케줄링할 때, 즉 -fschedule-insns 또는에서 -O2 or
더 높은.
-fno-sched-spec
무부하 명령어의 투기적 움직임을 허용하지 마십시오. 이것은 일반적으로 다음으로 활성화됩니다.
레지스터 할당 전에 스케줄링할 때 기본값, 즉 -fschedule-insns 또는에서
-O2 이상.
-fsched-압력
레지스터 할당 전에 레지스터 압력 감지 숙소 예약을 활성화합니다. 이것
레지스터 할당이 활성화되기 전에 스케줄링할 때만 의미가 있습니다.
-fschedule-insns 또는에서 -O2 또는 더 높게. 이 옵션을 사용하면 생성된
레지스터 압력이 숫자 이상으로 증가하는 것을 방지하여 크기를 줄입니다.
사용 가능한 하드 레지스터 및 레지스터 할당의 후속 유출.
-fsched-사양-로드
일부 로드 명령의 추측 모션을 허용합니다. 이것은 다음과 같은 경우에만 의미가 있습니다.
레지스터 할당 전에 스케줄링, 즉 -fschedule-insns 또는에서 -O2 이상.
-fsched-spec-load-위험한
더 많은 로드 명령의 추측 모션을 허용합니다. 이것은 다음과 같은 경우에만 의미가 있습니다.
레지스터 할당 전에 스케줄링, 즉 -fschedule-insns 또는에서 -O2 이상.
-fsched-staled-insns
-fsched-stalled-insns=n
지연 대기열에서 조기에 이동할 수 있는 숙박 시설(있는 경우)의 수를 정의합니다.
두 번째 스케줄링 단계에서 준비 목록에 insns를 추가합니다. -fno-sched-staled-insns
어떤 여관도 조기에 이동되지 않음을 의미하며, -fsched-stalled-insns=0 없음을 의미
조기에 이동할 수 있는 대기 중인 인의 수에 대한 제한. -fsched-staled-insns
값이 없는 것은 다음과 같습니다. -fsched-stalled-insns=1.
-fsched-stalled-insns-dep
-fsched-stalled-insns-dep=n
중단된 시설에 대한 종속성에 대해 검사하는 숙박 시설 그룹(주기)의 수를 정의합니다.
이는 지연된 여관 대기열에서 조기 제거 후보입니다. 이것은 가지고있다
두 번째 스케쥴링 패스 동안에만 효과를 나타냅니다. -fsched-staled-insns is
익숙한. -fno-sched-stalled-insns-dep 에 해당하는 -fsched-stalled-insns-dep=0.
-fsched-stalled-insns-dep 값이 없는 것은 다음과 같습니다.
-fsched-stalled-insns-dep=1.
-fsched2-use-수퍼블록
레지스터 할당 후 스케줄링할 때 수퍼블록 스케줄링을 사용하십시오. 이것은 허용
기본 블록 경계를 넘어 더 빠른 일정으로 이동합니다. 이 옵션은
GCC에서 사용하는 모든 기계 설명이 CPU를 충분히 가깝게 모델링하는 것은 아니기 때문에 실험적입니다.
알고리즘의 신뢰할 수 없는 결과를 피하기 위해.
이것은 레지스터 할당 후 스케줄링할 때만 의미가 있습니다.
-fschedule-insns2 또는에서 -O2 이상.
-fsched-group-휴리스틱
스케줄러에서 그룹 휴리스틱을 활성화합니다. 이 휴리스틱은 명령을 선호합니다.
일정 그룹에 속해 있습니다. 일정이 다음과 같을 때 기본적으로 활성화됩니다.
활성화, 즉 -fschedule-insns or -fschedule-insns2 또는에서 -O2 이상.
-fsched-critical-path-휴리스틱
스케줄러에서 임계 경로 휴리스틱을 활성화합니다. 이 휴리스틱 호의
중요한 경로에 대한 지침. 일정이 다음과 같을 때 기본적으로 활성화됩니다.
활성화, 즉 -fschedule-insns or -fschedule-insns2 또는에서 -O2 이상.
-fsched-spec-insn-휴리스틱
스케줄러에서 추론적 명령어 휴리스틱을 활성화합니다. 이 휴리스틱 호의
의존성이 더 큰 투기적 명령. 기본적으로 활성화되어 있습니다.
스케줄링이 활성화된 경우, 즉 -fschedule-insns or -fschedule-insns2 또는에서 -O2
이상.
-fsched-rank-휴리스틱
스케줄러에서 순위 휴리스틱을 활성화합니다. 이 휴리스틱은 명령을 선호합니다.
크기나 빈도가 더 큰 기본 블록에 속합니다. 기본적으로 활성화되어 있습니다.
스케줄링이 활성화된 경우, 즉 -fschedule-insns or -fschedule-insns2 또는에서 -O2
이상.
-fsched-last-insn-휴리스틱
스케줄러에서 마지막 명령 휴리스틱을 활성화합니다. 이 휴리스틱은
예정된 마지막 명령에 덜 의존하는 명령. 이것은 활성화되어 있습니다
예약이 활성화된 경우 기본적으로 -fschedule-insns or -fschedule-insns2
또는에서 -O2 이상.
-fsched-dep-count-휴리스틱
스케줄러에서 종속 계수 휴리스틱을 활성화합니다. 이 휴리스틱은
그에 따라 더 많은 지침이 있는 지침. 기본적으로 활성화되어 있습니다.
스케줄링이 활성화된 경우, 즉 -fschedule-insns or -fschedule-insns2 또는에서 -O2
이상.
-freschedule-modulo-scheduled-loops
모듈로 스케줄링은 기존 스케줄링보다 먼저 수행됩니다. 루프가 모듈로인 경우
예정된, 이후의 예약 패스는 일정을 변경할 수 있습니다. 이 옵션을 사용하여
그 행동을 통제하십시오.
-f선택적 스케줄링
선택적 스케줄링 알고리즘을 사용하여 명령을 스케줄링하십시오. 선택적 스케줄링 실행
첫 번째 스케줄러 패스 대신.
-f선택적-스케줄링2
선택적 스케줄링 알고리즘을 사용하여 명령을 스케줄링하십시오. 선택적 스케줄링 실행
두 번째 스케줄러 패스 대신.
-fsel-sched-파이프라이닝
선택적 스케줄링 중에 가장 안쪽 루프의 소프트웨어 파이프라이닝을 활성화합니다. 이것
옵션은 다음 중 하나가 아닌 한 효과가 없습니다. -f선택적 스케줄링 or -f선택적-스케줄링2
켜져 있습니다.
-fsel-sched-파이프라인-외부 루프
선택적 스케줄링 중에 루프를 파이프라이닝할 때 외부 루프도 파이프라인합니다. 이것
옵션은 다음을 제외하고는 효과가 없습니다. -fsel-sched-파이프라이닝 켜져 있습니다.
-의미론적 삽입
ELF와 같은 일부 개체 형식은 동적 링커에 의한 기호 삽입을 허용합니다.
이는 DSO에서 내보낸 기호의 경우 컴파일러에서 다음을 수행할 수 없음을 의미합니다.
절차 간 전파, 인라인 및 기타 최적화
해당 기능이나 변수는 변경될 수 있습니다. 이 기능은 유용하지만
예를 들어 디버깅 구현으로 메모리 할당 기능을 다시 작성하려면
코드 품질 면에서 비싸다. 와 함께 -fno-의미론적-개재 컴파일러
함수에 대한 삽입이 발생하면 덮어쓰기 함수가 다음을 수행한다고 가정합니다.
정확히 동일한 의미(및 부작용). 마찬가지로 삽입이 발생하면
변수의 경우 변수의 생성자는 동일합니다. 깃발은 없다
명시적으로 인라인으로 선언된 함수에 대한 효과(절대 허용되지 않는 경우
의미 변경을 위한 삽입) 및 명시적으로 약하다고 선언된 기호에 대해.
-fshrink-wrap
함수 프롤로그를 필요로 하는 부분이 아니라 함수의 일부 전에만 내보냅니다.
기능의 상단. 이 플래그는 기본적으로 활성화되어 있습니다. -O 이상.
-fcaller 저장
함수 호출에 의해 차단된 레지스터에 값 할당을 활성화합니다.
이러한 호출 주변의 레지스터를 저장하고 복원하기 위한 추가 명령을 내보냅니다. 그런
할당은 더 나은 코드를 생성하는 것처럼 보일 때만 수행됩니다.
이 옵션은 일반적으로 다음이 있는 특정 시스템에서 기본적으로 항상 활성화되어 있습니다.
대신 사용할 호출 보존 레지스터가 없습니다.
수준에서 활성화됨 -O2, -O3, - 오스.
-fcombin-stack-adjustments
스택 조정(푸시 및 팝) 및 스택 메모리 참조를 추적한 다음 시도합니다.
그것들을 결합하는 방법을 찾기 위해.
기본적으로 활성화됨 -O1 이상.
-피파라
호출자 저장 레지스터가 호출된 어떤 레지스터에서도 사용되지 않는 경우 할당을 위해 호출자 저장 레지스터를 사용합니다.
기능. 이 경우 통화 주변에 저장하고 복원할 필요가 없습니다.
이것은 호출된 함수가 현재와 동일한 컴파일 단위의 일부인 경우에만 가능합니다.
함수와 그것들은 그 전에 컴파일됩니다.
수준에서 활성화됨 -O2, -O3, - 오스.
-fconserve-스택
스택 사용을 최소화하려고 합니다. 컴파일러는 더 적은 스택 공간을 사용하려고 시도합니다.
프로그램이 느려지는 경우. 이 옵션은 설정을 의미합니다 대형 스택 프레임
매개변수를 100으로 설정하고 대형 스택 프레임 성장 매개변수를 400으로 설정합니다.
-fttree-재연결
나무에서 재결합을 수행합니다. 이 플래그는 기본적으로 활성화되어 있습니다. -O 이상.
-fttree-pre
트리에서 부분 중복 제거(PRE)를 수행합니다. 이 플래그는 다음에 의해 활성화됩니다.
기본값 -O2 and -O3.
-ftree-부분 사전
부분 중복 제거(PRE)를 보다 적극적으로 만듭니다. 이 플래그는 다음에 의해 활성화됩니다.
기본값 -O3.
-fttree-forwprop
트리에서 순방향 전파를 수행합니다. 이 플래그는 기본적으로 활성화되어 있습니다. -O and
더 높은.
-fttree-fre
트리에서 전체 중복 제거(FRE)를 수행합니다. FRE와 FRE의 차이점
PRE는 FRE가 다음으로 이어지는 모든 경로에서 계산된 표현식만 고려한다는 것입니다.
중복 계산. 이 분석은 PRE보다 빠르지만 노출 횟수는 적습니다.
중복. 이 플래그는 기본적으로 활성화되어 있습니다. -O 이상.
-fttree-phiprop
나무의 조건부 포인터에서 부하를 끌어올립니다. 이 패스는 다음에 의해 활성화됩니다.
기본값 -O 이상.
-fhoist-인접 하중
부하가
동일한 구조의 인접 위치와 대상 아키텍처에는 조건부
이동 지시. 이 플래그는 기본적으로 활성화되어 있습니다. -O2 이상.
-ftree 복사 소품
트리에서 복사 전파를 수행합니다. 이 패스는 불필요한 복사 작업을 제거합니다.
이 플래그는 기본적으로 활성화되어 있습니다. -O 이상.
-fipa-순수-const
어떤 함수가 순수하거나 상수인지 알아보십시오. 기본적으로 활성화됨 -O 이상.
-fipa-참조
컴파일 단위를 벗어나지 않는 정적 변수를 찾으십시오. 에 의해 활성화됨
기본값 -O 이상.
-fipa-pta
절차 간 포인터 분석 및 절차 간 수정을 수행하고
참조 분석. 이 옵션은 과도한 메모리 및 컴파일 시간 사용을 유발할 수 있습니다.
큰 컴파일 단위. 어떤 최적화 수준에서도 기본적으로 활성화되어 있지 않습니다.
-fipa 프로필
절차 간 프로파일 전파를 수행합니다. Cold에서만 호출되는 함수
기능은 콜드로 표시됩니다. 또한 한 번 실행된 기능(예: "콜드",
"noreturn", 정적 생성자 또는 소멸자)가 식별됩니다. 콜드 기능 및
한 번 실행된 함수의 루프가 적은 부분은 크기에 맞게 최적화됩니다. 에 의해 활성화됨
기본값 -O 이상.
-fipa-cp
절차간 상수 전파를 수행합니다. 이 최적화는 프로그램을 분석합니다
함수에 전달된 값이 상수인지 확인한 다음 최적화
따라서. 이 최적화는 다음과 같은 경우 성능을 크게 향상시킬 수 있습니다.
응용 프로그램에 함수에 전달된 상수가 있습니다. 이 플래그는 기본적으로 활성화되어 있습니다.
-O2, - 오스 and -O3.
-fipa-cp-클론
프로시저 간 상수 전파를 더 강하게 만들기 위해 함수 복제를 수행합니다. 언제
활성화된 경우 절차 간 상수 전파가 기능 복제를 수행합니다.
외부에서 볼 수 있는 함수는 상수 인수로 호출할 수 있습니다. 왜냐하면 이건
최적화는 기능의 여러 복사본을 생성할 수 있으므로 크게 증가할 수 있습니다.
코드 크기(참조 --매개변수 ipcp 단위 성장 =가치). 이 플래그는 기본적으로 활성화되어 있습니다.
-O3.
-fipa-cp-정렬
활성화되면 이 최적화는 다음을 지원하기 위해 함수 매개변수의 정렬을 전파합니다.
더 나은 벡터화 및 문자열 연산.
이 플래그는 기본적으로 활성화되어 있습니다. -O2 and - 오스. 그것은 그것을 요구한다 -fipa-cp 사용 가능합니다.
-fipa-icf
함수 및 읽기 전용 변수에 대해 동일한 코드 접기를 수행합니다. NS
최적화는 코드 크기를 줄이고 함수를 대체하여 해제 스택을 방해할 수 있습니다.
다른 이름을 가진 동등한 것으로. 최적화는 다음과 함께 더 효과적으로 작동합니다.
링크 시간 최적화가 활성화되었습니다.
그럼에도 불구하고 동작은 Gold Linker ICF 최적화와 유사하지만 GCC ICF는
레벨이 다르므로 최적화가 동일하지 않습니다.
GCC에서만 찾을 수 있으며 등가물은 Gold에서만 찾을 수 있습니다.
이 플래그는 기본적으로 활성화되어 있습니다. -O2 and - 오스.
-분리-오류-경로-역참조
null 역참조로 인해 잘못되거나 정의되지 않은 동작을 유발하는 경로 감지
바늘. 주 제어 흐름에서 해당 경로를 분리하고 다음을 사용하여 명령문을 전환합니다.
트랩에 잘못된 또는 정의되지 않은 동작. 이 플래그는 기본적으로 활성화되어 있습니다. -O2
이상.
-분리-오류-경로-속성
null 값 사용으로 인해 잘못되거나 정의되지 않은 동작을 유발하는 경로 감지
"returns_nonnull" 또는 "nonnull" 속성에 의해 금지된 방식으로. 해당 경로를 격리
주 제어 흐름에서 오류가 발생하거나 정의되지 않은 동작으로 명령문을 전환합니다.
함정에. 이것은 현재 활성화되어 있지 않지만 다음에 의해 활성화될 수 있습니다. -O2 에서 귀하를 참조하는 데 사용됩니다.
-ftree-싱크대
나무에서 앞으로 저장 동작을 수행합니다. 이 플래그는 기본적으로 활성화되어 있습니다. -O and
더 높은.
-ftree-bit-ccp
트리에서 희소 조건부 비트 상수 전파 수행 및 포인터 전파
얼라인먼트 정보. 이 패스는 로컬 스칼라 변수에서만 작동하며 다음과 같습니다.
기본적으로 활성화됨 -O 그리고 더 높은. 그것은 그것을 요구한다 -fttree-ccp 사용 가능합니다.
-fttree-ccp
트리에서 희소 조건부 상수 전파(CCP)를 수행합니다. 이 패스만
로컬 스칼라 변수에서 작동하며 기본적으로 다음에서 활성화됩니다. -O 이상.
-fssa-phiopt
조건부 코드를 최적화하기 위해 SSA PHI 노드에서 패턴 일치를 수행합니다. 이 패스는
기본적으로 활성화됨 -O 이상.
-ftree 스위치 변환
스위치에서 단순 초기화를 a에서 초기화로 변환
스칼라 배열. 이 플래그는 기본적으로 활성화되어 있습니다. -O2 이상.
-fttree-tail-merge
동일한 코드 시퀀스를 찾습니다. 발견되면 하나를 다른 하나의 점프로 교체하십시오.
이 최적화를 꼬리 병합 또는 교차 점프라고 합니다. 이 플래그는 다음에 의해 활성화됩니다.
기본값 -O2 그리고 더 높은. 이 패스의 컴파일 시간은 다음을 사용하여 제한할 수 있습니다.
최대 꼬리 병합 비교 매개 변수 및 최대 꼬리 병합 반복 매개 변수입니다.
-fttree-dce
트리에서 데드 코드 제거(DCE)를 수행합니다. 이 플래그는 기본적으로 활성화되어 있습니다. -O
이상.
-ftree-내장 호출-dce
내장 함수 호출에 대해 조건부 데드 코드 제거(DCE)를 수행합니다.
"errno"를 설정할 수 있지만 그렇지 않으면 부작용이 없습니다. 이 플래그는 기본적으로 활성화되어 있습니다.
at -O2 그리고 더 높은 경우 - 오스 도 지정되지 않습니다.
-ftree-지배자-opts
다양한 단순 스칼라 정리 수행(상수/복사 전파, 이중화
도미네이터 기반 제거, 범위 전파 및 표현 단순화)
트리 순회. 이것은 또한 점프 스레딩을 수행합니다(점프에 대한 점프를 줄이기 위해). 이것
플래그는 기본적으로 활성화되어 있습니다. -O 이상.
-fttree-dse
나무에서 죽은 저장소 제거(DSE)를 수행합니다. 죽은 가게는 추억의 가게다
중간 로드 없이 나중에 다른 저장소에서 덮어쓰는 위치입니다. 에
이 경우 이전 저장소를 삭제할 수 있습니다. 이 플래그는 기본적으로 활성화되어 있습니다. -O and
더 높은.
-fttree-ch
트리에서 루프 헤더 복사를 수행합니다. 증가하기 때문에 유리합니다.
코드 모션 최적화의 효율성. 그것은 또한 한 점프를 저장합니다. 이 깃발은
기본적으로 활성화됨 -O 그리고 더 높은. 에 대해 활성화되어 있지 않습니다. - 오스, 일반적으로
코드 크기를 늘립니다.
-ftree 루프 최적화
트리에서 루프 최적화를 수행합니다. 이 플래그는 기본적으로 활성화되어 있습니다. -O and
더 높은.
-ftree 루프 선형
트리에서 루프 교환 변환을 수행합니다. 와 동일 - 루프 교환. 쓰다
이 코드 변환에서 GCC는 다음과 같이 구성되어야 합니다. --isl과 함께 를 사용하려면
흑연 루프 변환 인프라.
- 루프 교환
루프에서 루프 교환 변환을 수행합니다. 두 개의 중첩 루프 교환
내부 및 외부 루프를 전환합니다. 예를 들어 다음과 같은 루프가 있다고 가정합니다.
DO J = 1, M
내가 = 1, N
A(J, I) = A(J, I) * C
엔도
엔도
루프 교환은 루프를 작성된 것처럼 변환합니다.
내가 = 1, N
DO J = 1, M
A(J, I) = A(J, I) * C
엔도
엔도
Fortran에서는 "N"이 캐시보다 클 때 유용할 수 있습니다.
배열의 요소는 열별로 연속적으로 메모리에 저장되며 원본
루프는 행을 반복하여 액세스할 때마다 잠재적으로 캐시 누락을 생성합니다. 이것
최적화는 GCC에서 지원하는 모든 언어에 적용되며 이에 국한되지 않습니다.
포트란. 이 코드 변환을 사용하려면 GCC를 다음과 같이 구성해야 합니다. --isl과 함께 에
Graphite 루프 변환 인프라를 활성화합니다.
-floop-스트립-광산
루프에서 루프 스트립 마이닝 변환을 수행합니다. 스트립 마이닝은 루프를 다음으로 분할합니다.
두 개의 중첩 루프. 외부 루프는 스트립 크기와 동일한 보폭을 가지며 내부 루프는
루프에는 스트립 내에서 원래 루프의 스트라이드가 있습니다. 스트립 길이 변경 가능
를 사용하여 루프 블록 타일 크기 매개변수. 예를 들어 다음과 같은 루프가 있다고 가정합니다.
내가 = 1, N
A(I) = A(I) + C
엔도
루프 스트립 마이닝은 루프를 다음과 같이 변환합니다.
DO II = 1, N, 51
DO I = II, 최소(II + 50, N)
A(I) = A(I) + C
엔도
엔도
이 최적화는 GCC에서 지원하는 모든 언어에 적용되며 이에 국한되지 않습니다.
포트란. 이 코드 변환을 사용하려면 GCC를 다음과 같이 구성해야 합니다. --isl과 함께 에
Graphite 루프 변환 인프라를 활성화합니다.
-floop-블록
루프에서 루프 차단 변환을 수행합니다. 블로킹 스트립은 각 루프를 채굴합니다.
요소 루프의 메모리 액세스가 캐시 내부에 맞도록 루프 중첩. NS
스트립 길이는 다음을 사용하여 변경할 수 있습니다. 루프 블록 타일 크기 매개변수. 예를 들어,
다음과 같은 루프가 주어집니다.
내가 = 1, N
DO J = 1, M
A(J, I) = B(I) + C(J)
엔도
엔도
루프 차단은 루프를 작성된 것처럼 변환합니다.
DO II = 1, N, 51
DO JJ = 1, M, 51
DO I = II, 최소(II + 50, N)
DO J = JJ, 최소(JJ + 50, M)
A(J, I) = B(I) + C(J)
엔도
엔도
엔도
엔도
"M"이 캐시보다 클 때 유용할 수 있습니다.
캐시에 보관할 수 있는 더 적은 양의 데이터를 반복합니다. 이것
최적화는 GCC에서 지원하는 모든 언어에 적용되며 이에 국한되지 않습니다.
포트란. 이 코드 변환을 사용하려면 GCC를 다음과 같이 구성해야 합니다. --isl과 함께 에
Graphite 루프 변환 인프라를 활성화합니다.
-fgraphite-정체성
흑연에 대한 ID 변환을 활성화합니다. 모든 SCoP에 대해
다면체 표현을 다시 gimple로 변환합니다. 사용 -fgraphite-정체성
GIMPLE -> GRAPHITE -> GIMPLE 변환의 비용 또는 이점을 확인할 수 있습니다.
index와 같은 일부 최소 최적화는 코드 생성기 ISL에서도 수행됩니다.
루프에서 분할 및 데드 코드 제거.
-floop-nest-최적화
ISL 기반 루프 네스트 옵티마이저를 활성화합니다. 이것은 일반적인 루프 네스트 옵티마이저 기반입니다.
명왕성 최적화 알고리즘에. 에 최적화된 루프 구조를 계산합니다.
데이터 지역성과 병렬성. 이 옵션은 실험적입니다.
-플루프 풀기 및 걸림
ISL 기반 루프 네스트 옵티마이저에 대해 풀기 및 걸림을 활성화합니다. 언롤 팩터는 다음과 같습니다.
를 사용하여 변경 루프 풀기 걸림 크기 매개변수. 펼쳐진 차원(계산
가장 안쪽에서)를 사용하여 변경할 수 있습니다. 루프 풀기 걸림 깊이 매개 변수입니다.
.
-floop-병렬화-모두
흑연 데이터 종속성 분석을 사용하여 병렬화할 수 있는 루프를 식별합니다.
루프 전달 종속성을 포함하지 않도록 분석할 수 있는 모든 루프를 병렬화
루프를 병렬화하는 것이 수익성이 있는지 확인하지 않고.
-fcheck-데이터-deps
여러 데이터 종속성 분석기의 결과를 비교합니다. 이 옵션은 다음 용도로 사용됩니다.
데이터 의존성 분석기 디버깅.
-ftree-loop-if-변환
가장 안쪽 루프에서 조건부 점프를 분기 없는 것으로 변환 시도
등가물. 의도는 순서대로 가장 안쪽 루프에서 제어 흐름을 제거하는 것입니다.
이러한 루프를 처리하는 벡터화 패스의 기능을 개선합니다. 이것은
벡터화가 활성화된 경우 기본적으로 활성화됩니다.
-ftree-loop-if-convert-stores
메모리 쓰기를 포함하는 if-convert 조건부 점프도 시도합니다. 이것
변환은 조건부를 변환하므로 다중 스레드 프로그램에 안전하지 않을 수 있습니다.
무조건 메모리 쓰기에 메모리 쓰기. 예를 들어,
(i = 0, i < N, i++)
만약 (조건)
A[i] = expr;
로 변형됩니다
(i = 0, i < N, i++)
A[i] = 조건 ? expr : A[i];
잠재적으로 데이터 레이스를 생성합니다.
-ftree-loop-분포
루프 분배를 수행합니다. 이 플래그는 큰 루프 본문에서 캐시 성능을 향상시킬 수 있습니다.
병렬화 또는 벡터화와 같은 추가 루프 최적화를 허용합니다.
장소. 예를 들어, 루프
내가 = 1, N
A(I) = B(I) + C
D(I) = E(I) * F
엔도
로 변형됩니다
내가 = 1, N
A(I) = B(I) + C
엔도
내가 = 1, N
D(I) = E(I) * F
엔도
-ftree-루프-배포-패턴
에 대한 호출로 코드를 생성할 수 있는 패턴의 루프 배포를 수행합니다.
도서관. 이 플래그는 기본적으로 활성화되어 있습니다. -O3.
이 패스는 초기화 루프를 분산하고 memset XNUMX에 대한 호출을 생성합니다.
예를 들어, 루프
내가 = 1, N
A(I) = 0
B(I) = A(I) + 나
엔도
로 변형됩니다
내가 = 1, N
A(I) = 0
엔도
내가 = 1, N
B(I) = A(I) + 나
엔도
초기화 루프는 memset XNUMX에 대한 호출로 변환됩니다.
-ftree-루프-im
나무에서 루프 불변 동작을 수행합니다. 이 패스는 하드 불변량만 이동합니다.
RTL 수준에서 처리(함수 호출, 중요하지 않은 시퀀스로 확장되는 작업
여관). 와 함께 -펀스위치 루프 또한 다음 조건의 피연산자를 이동합니다.
루프 외부에서 불변하므로 다음에서 사소한 불변성 분석을 사용할 수 있습니다.
루프 해제. 패스에는 스토어 모션도 포함됩니다.
-ftree-루프-ivcanon
결정하는 루프의 반복 횟수에 대한 표준 카운터를 만듭니다.
반복 횟수는 복잡한 분석이 필요합니다. 이후 최적화는
수를 쉽게 결정하십시오. 특히 언롤링과 관련하여 유용합니다.
-fivopts
유도 변수 최적화 수행(강도 감소, 유도 변수
병합 및 유도 변수 제거).
-ftree 병렬화 루프=n
루프를 병렬화합니다. 즉, 반복 공간을 분할하여 n개의 스레드에서 실행합니다. 이것은
반복이 독립적이고 임의로 수행될 수 있는 루프에서만 가능
재정렬. 최적화는 루프에 대한 다중 프로세서 시스템에서만 수익성이 있습니다.
예를 들어 메모리 대역폭에 의해 제약을 받기보다는 CPU 집약적입니다. 이 옵션
의미하다 -pthread, 따라서 다음을 지원하는 대상에서만 지원됩니다.
-pthread.
-fttree-pta
나무에 대한 기능 로컬 지점 분석을 수행합니다. 이 플래그는 기본적으로 활성화되어 있습니다.
at -O 이상.
-fttree-sra
집계의 스칼라 교체를 수행합니다. 이 패스는 구조 참조를 대체합니다.
구조를 너무 일찍 메모리에 커밋하는 것을 방지하기 위해 스칼라를 사용합니다. 이 깃발은
기본적으로 활성화됨 -O 이상.
-ftree-copy이름 바꾸기
나무에 복사본 이름 바꾸기를 수행합니다. 이 패스는 컴파일러 임시 이름을 다음으로 바꾸려고 시도합니다.
복사 위치에 있는 다른 변수, 일반적으로 더 많은 변수 이름이 생성됩니다.
원래 변수와 매우 유사합니다. 이 플래그는 기본적으로 활성화되어 있습니다. -O and
더 높은.
-ftree-coalesce-inlined-vars
copyrename 패스를 알려주세요(참조 -ftree-copy이름 바꾸기) 소규모 사용자를 결합하려고 시도합니다.
정의된 변수도 있지만 다른 함수에서 인라인된 경우에만 가능합니다. 이것은
보다 제한된 형태의 -ftree-coalesce-vars. 이것은 그러한 디버그 정보에 해를 끼칠 수 있습니다.
인라인된 변수이지만 인라인된 함수의 변수를 각 변수와 분리합니다.
디버깅에서 예상 값을 포함할 가능성이 더 높은 기타
세션.
-ftree-coalesce-vars
copyrename 패스를 알려주세요(참조 -ftree-copy이름 바꾸기) 소규모 사용자를 결합하려고 시도합니다.
컴파일러 임시 대신 정의된 변수도 있습니다. 이것은 심각하게 제한할 수 있습니다
다음으로 컴파일된 최적화된 프로그램을 디버그하는 기능 -fno-var-추적-할당.
부정 형식에서 이 플래그는 다음을 포함한 사용자 변수의 SSA 병합을 방지합니다.
인라인 된 것. 이 옵션은 기본적으로 활성화되어 있습니다.
-fttree-ter
SSA->정상 단계에서 임시 표현식 교체를 수행합니다. 하나의
use/single def 임시는 사용 위치에서 정의된 값으로 대체됩니다.
표현. 이는 GIMPLE 코드가 아닌 결과를 가져오지만 확장자에게 훨씬 더 많은 것을 제공합니다.
복잡한 트리를 사용하여 더 나은 RTL 생성이 가능합니다. 이것은 다음에 의해 활성화됩니다.
기본값 -O 이상.
-fttree-slsr
나무에 직선 강도 감소를 수행합니다. 이것은 관련된
곱셈을 포함하는 표현식을 더 저렴한 계산으로 대체
가능할 때. 이것은 기본적으로 활성화되어 있습니다. -O 이상.
-ftree 벡터화
나무에서 벡터화를 수행합니다. 이 플래그는 -ftree 루프 벡터화 and
-ftree-slp-벡터화 명시적으로 지정되지 않은 경우.
-ftree 루프 벡터화
트리에서 루프 벡터화를 수행합니다. 이 플래그는 기본적으로 활성화되어 있습니다. -O3 그리고 언제
-ftree 벡터화 사용 가능합니다.
-ftree-slp-벡터화
나무에서 기본 블록 벡터화를 수행합니다. 이 플래그는 기본적으로 활성화되어 있습니다. -O3 and
언제 -ftree 벡터화 사용 가능합니다.
-fvect-비용 모델=모델
벡터화에 사용되는 비용 모델을 변경합니다. NS 모델 인수는 다음 중 하나여야 합니다.
무제한, 동적 or 싼. 와 더불어 무제한 벡터화된 코드 경로 모델
동안 수익성이 있다고 가정 동적 런타임 검사가 보호하는 모델링
실행할 가능성이 있는 반복 횟수에 대해서만 활성화하는 벡터화된 코드 경로
원래 스칼라 루프를 실행할 때보다 빠릅니다. NS 싼 모델 비활성화
예를 들어 다음으로 인해 비용이 많이 드는 루프의 벡터화
데이터 종속성 또는 정렬에 대한 필수 런타임 검사이지만 그렇지 않으면 다음과 같습니다.
동적 모델. 기본 비용 모델은 다른 최적화 플래그에 따라 달라지며 다음과 같습니다.
중 동적 or 싼.
-fsimd-비용 모델=모델
OpenMP 또는 Cilk로 표시된 루프의 벡터화에 사용되는 비용 모델 변경
플러스 simd 지시문. NS 모델 인수는 다음 중 하나여야 합니다. 무제한, 동적, 싼.
의 모든 값 모델 에 설명된 것과 동일한 의미를 갖습니다. -fvect-비용 모델 과 별
기본값으로 정의된 비용 모델 -fvect-비용 모델 사용.
-fttree-vrp
트리에서 값 범위 전파를 수행합니다. 이것은 일정한 전파와 유사합니다.
전달하지만 값 대신 값 범위가 전파됩니다. 이것은 허용
배열 바운드 검사 및 널 포인터와 같은 불필요한 범위 검사를 제거하기 위한 옵티마이저
체크 무늬. 이것은 기본적으로 활성화되어 있습니다. -O2 그리고 더 높은. 널 포인터 검사 제거
경우에만 수행됩니다 -fdelete-null-포인터 검사 사용 가능합니다.
-fsplit-ivs-in-unroller
이후의 반복에서 유도 변수 값의 표현을 가능하게 합니다.
첫 번째 반복의 값을 사용하여 펼쳐진 루프. 이것은 긴 의존성을 깨뜨립니다.
따라서 스케줄링 패스의 효율성이 향상됩니다.
조합 -fweb CSE는 종종 동일한 효과를 얻기에 충분합니다.
그러나 루프 본체가 보다 복잡한 경우에는 신뢰할 수 없습니다.
단일 기본 블록. 또한 일부 아키텍처에서는 다음으로 인해 전혀 작동하지 않습니다.
CSE 통과 제한.
이 최적화는 기본적으로 활성화되어 있습니다.
-f변수 확장-언롤러
이 옵션을 사용하면 컴파일러는 다음과 같은 경우 일부 로컬 변수의 여러 복사본을 만듭니다.
루프를 풀어서 우수한 코드를 생성할 수 있습니다.
-f부분 인라인
함수의 인라인 부분. 이 옵션은 자신을 인라인할 때만 효과가 있습니다.
에 의해 켜졌다 -finline-함수 or -finline-작은 기능 옵션을 제공합니다.
수준에서 활성화됨 -O2.
-f예측-공통
예측 커머닝 최적화, 즉 계산 재사용(특히
메모리 로드 및 저장) 루프의 이전 반복에서 수행되었습니다.
이 옵션은 수준에서 활성화됩니다. -O3.
-fprefetch 루프 배열
대상 머신에서 지원하는 경우 메모리를 프리페치하기 위한 명령을 생성합니다.
큰 배열에 액세스하는 루프의 성능을 향상시킵니다.
이 옵션은 더 좋거나 더 나쁜 코드를 생성할 수 있습니다. 결과는 에 크게 의존
소스 코드 내의 루프 구조.
수준에서 비활성화됨 - 오스.
-fno 엿보기
-fno-구멍2
머신별 엿보기 구멍 최적화를 비활성화합니다. 차이점
-fno 엿보기 and -fno-구멍2 컴파일러에서 구현되는 방식에 있습니다. 일부
대상은 하나를 사용하고 일부는 다른 하나를 사용하고 일부는 둘 다 사용합니다.
-f구멍 기본적으로 활성화되어 있습니다. -fpeephole2 수준에서 활성화됨 -O2, -O3, - 오스.
-fno-추측-분기-확률
휴리스틱을 사용하여 분기 확률을 추측하지 마십시오.
GCC는 분기 확률이 제공되지 않는 경우 발견적 방법을 사용하여 분기 확률을 추측합니다.
프로파일링 피드백(-fprofile-호). 이러한 휴리스틱은 제어 흐름을 기반으로 합니다.
그래프. 일부 분기 확률이 "__builtin_expect"로 지정되면
휴리스틱은 나머지 제어 흐름에 대한 분기 확률을 추측하는 데 사용됩니다.
그래프에서 "__builtin_expect" 정보를 고려합니다. 사이의 상호 작용
휴리스틱 및 "__builtin_expect"는 복잡할 수 있으며 경우에 따라 유용할 수 있습니다.
"__builtin_expect"의 효과가 더 쉽도록 휴리스틱을 비활성화합니다.
알다.
디폴트는 -fguess-분기 확률 수준에서 -O, -O2, -O3, - 오스.
-freorder-블록
취하는 수를 줄이기 위해 컴파일된 함수에서 기본 블록을 재정렬합니다.
분기하고 코드 지역성을 개선합니다.
수준에서 활성화됨 -O2, -O3.
-freeorder-blocks-and-partition
컴파일된 함수에서 기본 블록을 재정렬하는 것 외에도
취한 분기의 수, 핫 및 콜드 기본 블록을 별도의 섹션으로 분할
어셈블리 및 .o 파일의 페이징 및 캐시 지역 성능을 향상시킵니다.
이 최적화는 예외 처리가 있는 경우 자동으로 해제됩니다.
linkonce 섹션, 사용자 정의 섹션 속성이 있는 함수 및 모든
명명된 섹션을 지원하지 않는 아키텍처
수준에서 x86에 대해 활성화됨 -O2, -O3.
-freorder-함수
코드 지역성을 개선하기 위해 개체 파일에서 함수를 재정렬합니다. 이것은
가장 자주 실행되는 특수 하위 섹션 ".text.hot"을 사용하여 구현
기능 및 실행되지 않는 기능에 대한 ".text.unlikely". 재정렬은 다음과 같이 수행됩니다.
링커는 개체 파일 형식이 명명된 섹션을 지원해야 하므로 링커는
합리적인 방법으로.
또한 이 옵션을 적용하려면 프로필 피드백을 사용할 수 있어야 합니다. 보다
-fprofile-호 를 참조하세요
수준에서 활성화됨 -O2, -O3, - 오스.
-fstrict-앨리어싱
컴파일러가 언어에 적용할 수 있는 가장 엄격한 앨리어싱 규칙을 가정하도록 허용
컴파일 중입니다. C(및 C++)의 경우 유형에 따라 최적화가 활성화됩니다.
표현. 특히, 한 유형의 객체는 절대
유형이 거의 동일하지 않는 한 다른 유형의 객체와 동일한 주소입니다.
예를 들어, "unsigned int"는 "int"의 별칭을 지정할 수 있지만 "void*" 또는 "double"은 별칭을 지정할 수 없습니다. NS
문자 유형은 다른 유형의 별칭을 지정할 수 있습니다.
다음과 같은 코드에 특히 주의하십시오.
노동조합 {
int i;
더블 d;
};
정수 f() {
연합 a_union t;
td = 3.0;
반환 티;
}
가장 최근의 조합원과 다른 조합원의 글을 읽는 습관
("type-punning"이라고 함) 쓰는 것이 일반적입니다. 와도 -fstrict-앨리어싱, 유형-
유니온 유형을 통해 메모리에 액세스하는 경우 말장난이 허용됩니다. 그래서
위의 코드는 예상대로 작동합니다. 그러나 이 코드는 다음을 수행하지 않을 수 있습니다.
정수 f() {
연합 a_union t;
정수* ip;
td = 3.0;
아이피 = &t.i;
반환 *ip;
}
마찬가지로 주소를 가져와 결과 포인터를 캐스팅하고
캐스트가 공용체 유형을 사용하더라도 결과를 역참조하면 정의되지 않은 동작이 있습니다.
예 :
정수 f() {
이중 d = 3.0;
return ((union a_union *) &d)->i;
}
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 -fstrict-앨리어싱 옵션이 수준에서 활성화됨 -O2, -O3, - 오스.
-fstrict-오버플로
컴파일러가 언어에 따라 엄격한 서명된 오버플로 규칙을 가정하도록 허용
컴파일 중입니다. C(및 C++)의 경우 이는 다음을 사용하여 산술을 수행할 때 오버플로를 의미합니다.
부호 있는 숫자는 정의되지 않습니다. 즉, 컴파일러는 그렇지 않다고 가정할 수 있습니다.
일어나 다. 이를 통해 다양한 최적화가 가능합니다. 예를 들어 컴파일러는 다음과 같이 가정합니다.
"i + 10 > i"와 같은 표현식은 부호 있는 "i"에 대해 항상 참입니다. 이 가정은
"i + 10"인 경우 표현식이 거짓이므로 부호 있는 오버플로가 정의되지 않은 경우에만 유효합니다.
XNUMX의 보수 산술을 사용할 때 오버플로가 발생합니다. 이 옵션이 적용되면
부호 있는 숫자 오버플로에 대한 작업을 작성해야 하는지 여부를 결정하려고 시도합니다.
실제로 오버플로가 발생하지 않도록 주의하십시오.
이 옵션을 사용하면 컴파일러가 엄격한 포인터 의미를 가정할 수도 있습니다.
객체에 대한 포인터(해당 포인터에 오프셋을 추가해도 포인터가 생성되지 않는 경우)
동일한 객체에 대한 추가는 정의되지 않습니다. 이렇게 하면 컴파일러가 결론을 내릴 수 있습니다.
"p + u > p"는 포인터 "p"와 부호 없는 정수 "u"에 대해 항상 참입니다. 이것
표현식이 다음과 같이 포인터 랩어라운드가 정의되지 않았기 때문에 가정은 유효합니다.
XNUMX의 보수 산술을 사용하여 "p + u"가 오버플로되면 false입니다.
참조 항목 -fwrapv 옵션. 사용 -fwrapv 정수 부호 있는 오버플로는 다음을 의미합니다.
완전히 정의됨: 랩핑됩니다. 언제 -fwrapv 가 사용되며 차이가 없습니다.
-fstrict-오버플로 and -fno-strict-오버플로 정수의 경우. 와 함께 -fwrapv 특정 유형
오버플로가 허용됩니다. 예를 들어 컴파일러가 다음을 수행할 때 오버플로가 발생하면
상수에 대한 산술, 오버플로된 값은 여전히 다음과 함께 사용할 수 있습니다. -fwrapv, 하지만
그렇지 않으면.
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 -fstrict-오버플로 옵션이 수준에서 활성화됨 -O2, -O3, - 오스.
-falign-함수
-falign-기능=n
함수의 시작을 다음보다 큰 XNUMX의 거듭제곱에 맞춥니다. n, 다음으로 건너뛰기 n
바이트. 예를 들어, -falign-기능=32 함수를 다음 32바이트에 정렬합니다.
경계하지만 -falign-기능=24 이 경우에만 다음 32바이트 경계에 정렬합니다.
23바이트 이하를 건너뛰어 수행할 수 있습니다.
-fno-정렬-기능 and -falign-기능=1 동등하고 기능을 의미합니다
정렬되지 않습니다.
일부 어셈블러는 다음 경우에만 이 플래그를 지원합니다. n XNUMX의 거듭제곱입니다. 그 경우, 그것은
반올림.
If n 지정되지 않았거나 XNUMX이면 시스템 종속 기본값을 사용합니다.
수준에서 활성화됨 -O2, -O3.
-falign-라벨
-falign-레이블=n
모든 분기 대상을 XNUMX의 거듭제곱 경계에 정렬하고 n 다음과 같은 바이트
-falign-함수. 이 옵션은
코드의 일반적인 흐름에서 분기 대상에 도달했을 때의 더미 작업입니다.
-fno-정렬-레이블 and -falign-레이블=1 동일하며 레이블이 동일하지 않음을 의미합니다.
정렬.
If -정렬 루프 or -정렬 점프 적용 가능하고 이 값보다 큰 경우
대신 해당 값이 사용됩니다.
If n 지정되지 않았거나 XNUMX인 경우 기계 종속 기본값을 사용합니다.
될 1, 정렬이 없음을 의미합니다.
수준에서 활성화됨 -O2, -O3.
-정렬 루프
-정렬 루프=n
루프를 XNUMX의 거듭제곱 경계로 정렬하고 다음으로 건너뜁니다. n 다음과 같은 바이트 -falign-함수.
루프가 여러 번 실행되면 더미 실행을 보완합니다.
작업.
-fno-align 루프 and -falign 루프=1 동등하며 루프가
정렬.
If n 지정되지 않았거나 XNUMX이면 시스템 종속 기본값을 사용합니다.
수준에서 활성화됨 -O2, -O3.
-정렬 점프
-falign-점프=n
목표가 있는 분기 목표에 대해 분기 목표를 XNUMX의 거듭제곱 경계에 맞춥니다.
점프를 통해서만 도달할 수 있습니다. n 다음과 같은 바이트 -falign-함수. 에
이 경우 더미 작업을 실행할 필요가 없습니다.
-fno-align-점프 and -falign-점프=1 동등하며 루프가
정렬.
If n 지정되지 않았거나 XNUMX이면 시스템 종속 기본값을 사용합니다.
수준에서 활성화됨 -O2, -O3.
-한 번에 단위
이 옵션은 호환성을 위해 남겨둡니다. -한 번에 단위 효과가 없는 반면
-fno-한 번에 단위 의미하다 -fno-최상위-재주문 and -fno-섹션 앵커.
기본적으로 활성화됩니다.
-fno-최상위-재주문
최상위 함수, 변수 및 "asm" 문을 재정렬하지 마십시오. 출력
입력 파일에 나타나는 순서와 동일합니다. 이 옵션을 사용할 때,
참조되지 않은 정적 변수는 제거되지 않습니다. 이 옵션은 다음을 지원하기 위한 것입니다.
특정 순서에 의존하는 기존 코드. 새 코드의 경우 다음을 사용하는 것이 좋습니다.
가능한 경우 속성.
수준에서 활성화됨 -O0. 명시적으로 비활성화하면 다음을 의미하기도 합니다. -fno-섹션 앵커,
그렇지 않으면 활성화됩니다. -O0 일부 대상에.
-fweb
레지스터 할당 목적으로 일반적으로 사용되는 웹을 구성하고 각 웹을 할당합니다.
개별 의사 레지스터 이를 통해 레지스터 할당 패스가 작동할 수 있습니다.
유사하지만 CSE,
루프 옵티마이저 및 사소한 데드 코드 제거기. 그러나 디버깅을 할 수 있습니다.
변수는 더 이상 "홈 레지스터"에 머물지 않기 때문에 불가능합니다.
기본적으로 활성화됨 -펀롤 루프.
-전체 프로그램
현재 컴파일 단위가 컴파일되는 전체 프로그램을 나타낸다고 가정합니다.
"main"과 병합된 것을 제외한 모든 공용 함수 및 변수
속성 "externally_visible"은 정적 함수가 되고 실제로 최적화됩니다.
절차 간 최적화 프로그램에 의해 보다 적극적으로.
이 옵션은 다음과 함께 사용하면 안 됩니다. -flto. 대신 링커에 의존
플러그인은 더 안전하고 정확한 정보를 제공해야 합니다.
-flto[=n]
이 옵션은 표준 링크 시간 최적화 프로그램을 실행합니다. 소스 코드와 함께 호출될 때
GIMPLE(GCC의 내부 표현 중 하나)을 생성하고 특수 ELF에 씁니다.
개체 파일의 섹션. 오브젝트 파일이 함께 링크되면 모든
함수 본문은 이러한 ELF 섹션에서 읽고 마치 이전에 있었던 것처럼 인스턴스화됩니다.
동일한 번역 단위의 일부입니다.
링크 타임 옵티마이저를 사용하려면, -flto 최적화 옵션은 다음에서 지정해야 합니다.
컴파일 시간과 최종 링크 동안. 예를 들어:
gcc -c -O2 -flto foo.c
gcc -c -O2 -flto bar.c
gcc -o myprog -flto -O2 foo.o bar.o
GCC에 대한 처음 두 번의 호출은 GIMPLE의 바이트 코드 표현을 특수 파일에 저장합니다.
내부 ELF 섹션 푸.오 and 바오. 최종 호출은 GIMPLE 바이트 코드를 읽습니다.
에 푸.오 and 바오, 두 파일을 단일 내부 이미지로 병합하고 컴파일합니다.
평소와 같은 결과. 둘 다 이후로 푸.오 and 바오 이것은 하나의 이미지로 병합됩니다.
GCC의 모든 절차 간 분석 및 최적화가
두 개의 파일이 하나의 파일처럼 보입니다. 이것은 예를 들어 내부가 다음과 같다는 것을 의미합니다.
함수를 인라인할 수 있는 바오 기능으로 푸.오 그 반대.
링크 시간 최적화를 활성화하는 또 다른 (간단한) 방법은 다음과 같습니다.
gcc -o myprog -flto -O2 foo.c bar.c
위의 바이트 코드 생성 foo.c and 바.씨, 그것들을 하나로 병합합니다.
GIMPLE 표현 및 평소와 같이 최적화하여 생성 마이프로그.
명심해야 할 유일한 중요한 점은 링크 시간 최적화를 활성화하려면
링크 단계를 수행하려면 GCC 드라이버를 사용해야 합니다. 그런 다음 GCC가 자동으로 수행합니다.
관련된 객체 중 하나라도 컴파일된 경우 링크 시간 최적화 -flto
명령줄 옵션. 일반적으로 사용할 최적화 옵션을 지정해야 합니다.
GCC가 최적화를 추측하는 데 영리하게 시도하지만 링크 시간 최적화를 위해
링크에서 지정하지 않은 경우 컴파일 시 사용되는 옵션에서 사용할 수준
시각. 링크 시간 최적화를 수행하기 위한 자동 결정을 항상 무시할 수 있습니다.
통과에 의한 링크 타임 -fno-lto 링크 명령에.
전체 프로그램 최적화를 효과적으로 수행하려면 특정 전체 프로그램을
프로그램 가정. 컴파일러는 어떤 함수와 변수가 될 수 있는지 알아야 합니다.
링크 시간에 최적화된 단위 외부의 라이브러리 및 런타임에서 액세스합니다. 언제
링커에서 지원하는 링커 플러그인(참조 -퓨즈-링커-플러그인) 통과
사용된 기호와 외부에서 볼 수 있는 기호에 대한 정보를 컴파일러에 제공합니다. 때
링커 플러그인을 사용할 수 없습니다. -전체 프로그램 컴파일러를 허용하는 데 사용해야 합니다.
이러한 가정을 하면 보다 적극적인 최적화 결정이 내려집니다.
인셀덤 공식 판매점인 -퓨즈-링커-플러그인 파일이 다음으로 컴파일될 때 활성화되지 않습니다. -fltoWalk Through California 프로그램,
생성된 오브젝트 파일은 GIMPLE이 포함되어 있기 때문에 일반 오브젝트 파일보다 큽니다.
바이트코드와 일반적인 최종 코드(참조 -ffat-lto-객체. 이것은 그 개체를 의미합니다
LTO 정보가 있는 파일은 일반 오브젝트 파일로 링크할 수 있습니다. 만약 -fno-lto 통과
링커에는 절차 간 최적화가 적용되지 않습니다. 참고할 때
-fno-fat-lto-객체 컴파일 단계가 더 빠르지만 다음을 수행할 수 없습니다.
일반, 비 LTO 링크.
또한 개별 파일을 컴파일하는 데 사용되는 최적화 플래그는
링크 타임에 사용되는 것과 반드시 관련이 있습니다. 예를 들어,
gcc -c -O0 -ffat-lto-객체 -flto foo.c
gcc -c -O0 -ffat-lto-객체 -flto bar.c
gcc -o myprog -O3 foo.o bar.o
이렇게 하면 최적화되지 않은 어셈블러 코드가 포함된 개별 개체 파일이 생성되지만
결과 바이너리 마이프로그 에 최적화되어 있습니다. -O3. 대신 최종 바이너리가
생성 -fno-lto다음, 마이프로그 최적화되어 있지 않습니다.
최종 바이너리를 생성할 때 GCC는 링크 타임 최적화만 적용합니다.
바이트코드가 포함된 파일 따라서 개체 파일과
GIMPLE 바이트 코드 및 최종 개체 코드가 있는 라이브러리. GCC가 자동으로 선택
LTO 모드에서 최적화할 파일과 추가 없이 연결할 파일
처리.
다음과 같이 바이트 코드를 생성할 때 GCC에 의해 보존되는 일부 코드 생성 플래그가 있습니다.
최종 연결 단계에서 사용해야 합니다. 일반적으로 지정된 옵션
링크 타임은 컴파일 타임에 지정된 것을 재정의합니다.
최적화 수준 옵션을 지정하지 않은 경우 -O 링크 타임에 GCC 계산
하나는 개체 파일을 컴파일할 때 사용되는 최적화 수준을 기반으로 합니다. NS
여기에서 가장 높은 최적화 수준이 승리합니다.
현재 다음 옵션과 해당 설정은 첫 번째 개체 파일에서 가져옵니다.
명시적으로 지정했습니다. -fPIC, -fpic, -파이, -f공통, -예외,
-fnon-call-exception, -fgnu-tm 그리고 모든 -m 타겟 플래그.
특정 ABI 변경 플래그는 모든 컴파일 단위에서 일치하고 시도하는 데 필요합니다.
충돌하는 값으로 링크 타임에 이것을 무시하는 것은 무시됩니다. 여기에는 다음이 포함됩니다.
다음과 같은 옵션 -freg-구조체-반환 and -fpcc-구조체-반환.
같은 다른 옵션 -ffp-계약, -fno-strict-오버플로, -fwrapv, -fno-trapv or
-fno-엄격한 앨리어싱 링크 단계를 거쳐 보수적으로 병합됩니다.
충돌하는 번역 단위의 경우. 구체적으로 특별히 -fno-strict-오버플로, -fwrapv and
-fno-trapv 우선시하고 예를 들어 -ffp-계약=해제 우선한다
-ffp-계약=빠른. 링크 타임에 재정의할 수 있습니다.
동일한 링크에 참여하는 모든 파일을 다음과 함께 컴파일하는 것이 좋습니다.
동일한 옵션을 선택하고 링크 시간에 해당 옵션을 지정합니다.
LTO가 별도의 호환되지 않는 유형으로 선언된 C 연결이 있는 객체를 만나는 경우
함께 연결될 번역 단위(ISO C99에 따른 정의되지 않은 동작
6.2.7), 비치명적 진단이 내려질 수 있습니다. 동작은 실행 시 여전히 정의되지 않습니다.
시각. 다른 언어에 대해서도 유사한 진단이 제기될 수 있습니다.
LTO의 또 다른 특징은 절차간 최적화를 적용할 수 있다는 것입니다.
다른 언어로 작성된 파일:
gcc -c -flto foo.c
g++ -c -flto bar.cc
gfortran -c -flto baz.f90
g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran
최종 링크는 다음으로 완료됩니다. g ++ C++ 런타임 라이브러리를 가져오고
-lgfortran Fortran 런타임 라이브러리를 가져오기 위해 추가되었습니다. 일반적으로 혼합할 때
LTO 모드에서 언어를 혼합할 때와 동일한 링크 명령 옵션을 사용해야 합니다.
일반(비 LTO) 컴파일의 언어.
GIMPLE 바이트코드가 포함된 객체 파일이 라이브러리 아카이브에 저장되어 있는 경우 다음과 같이 말하십시오.
libfoo.a, 사용중인 경우 LTO 링크에서 추출하여 사용할 수 있습니다.
플러그인을 지원하는 링커. LTO에 적합한 정적 라이브러리를 생성하려면 다음을 사용하십시오. gcc-ar
and gcc-ranlib 대신 ar and 란립; 개체 파일의 기호를 표시하려면
GIMPLE 바이트코드, 사용 gcc-nm. 이러한 명령에는 다음이 필요합니다. ar, 란립 and nm 되었습니다
플러그인 지원으로 컴파일됩니다. 링크 타임에 플래그 사용 -퓨즈-링커-플러그인 에
라이브러리가 LTO 최적화 프로세스에 참여하는지 확인합니다.
gcc -o myprog -O2 -flto -fuse-linker-plugin ao bo -lfoo
링커 플러그인이 활성화된 상태에서 링커는 다음에서 필요한 GIMPLE 파일을 추출합니다.
libfoo.a 실행 중인 GCC에 전달하여 집계된 일부로 만듭니다.
최적화할 GIMPLE 이미지입니다.
플러그인을 지원하는 링커를 사용하지 않거나 링커를 활성화하지 않는 경우
플러그인 다음 내부 개체 libfoo.a 평소와 같이 추출되고 연결되지만
LTO 최적화 프로세스에 참여하지 마십시오. 정적 라이브러리를 만들려면
LTO 최적화와 일반적인 연결 모두에 적합하며 다음을 사용하여 개체 파일을 컴파일합니다.
-flto -ffat-lto-객체.
링크 타임 최적화는 전체 프로그램이 작동할 필요가 없습니다.
프로그램에서 내보낼 기호가 필요하지 않은 경우 다음을 결합할 수 있습니다.
-flto and -전체 프로그램 절차 간 최적화 프로그램이 더 많은 것을 사용할 수 있도록
개선된 최적화 기회로 이어질 수 있는 공격적인 가정. 사용
-전체 프로그램 링커 플러그인이 활성화된 경우 필요하지 않습니다(참조 -퓨즈-링커-플러그인).
LTO의 현재 구현은 다음과 같은 바이트코드를 생성하려고 시도하지 않습니다.
서로 다른 유형의 호스트 간에 이식 가능합니다. 바이트코드 파일은 버전이 지정되어 있습니다.
엄격한 버전 검사이므로 한 버전의 GCC에서 생성된 바이트코드 파일은
이전 또는 최신 버전의 GCC로 작업하십시오.
링크 시간 최적화는 디버깅 정보 생성과 잘 작동하지 않습니다.
결합 -flto 과 -g 현재 실험 중이며 예상치 못한 결과가 발생할 것으로 예상됩니다.
결과.
옵션을 지정하면 n, 링크 타임에 수행되는 최적화 및 코드 생성
를 사용하여 병렬로 실행됩니다. n 설치된 병렬 작업을 활용하여 확인 프로그램)
환경 변수 MAKE 사용된 프로그램을 재정의하는 데 사용할 수 있습니다. 기본값
가치 n 1입니다.
지정할 수도 있습니다. -flto=작업 서버 GNU make의 작업 서버 모드를 사용하여
병렬 작업의 수. 이것은 GCC를 호출하는 Makefile이 이미
병렬로 실행합니다. 다음을 추가해야 합니다. + 부모의 명령 레시피에
이 작업을 수행하려면 Makefile이 필요합니다. 이 옵션은 다음과 같은 경우에만 작동합니다. MAKE GNU make입니다.
-flto-파티션=ALG
링크 시간 최적화 프로그램에서 사용하는 분할 알고리즘을 지정합니다. 값은
중 1 ~ 1 원본 소스 파일을 미러링하는 파티션을 지정하거나 균형이 잡힌
동일한 크기의 청크로 분할 지정(가능한 경우) 또는 최대 만드는 방법
가능한 모든 기호에 대한 새 파티션. 지정 없음 알고리즘으로
분할 및 스트리밍을 완전히 비활성화합니다. 기본값은 균형이 잡힌. 동안
1 ~ 1 다양한 코드 순서 문제에 대한 해결 방법으로 사용할 수 있습니다. 최대
파티셔닝은 내부 테스트 전용입니다. 가치 한 지정
값이 있는 동안 정확히 하나의 파티션을 사용해야 합니다. 없음 파티셔닝을 우회하고
WPA 단계에서 직접 링크 시간 최적화 단계를 실행합니다.
-flto-odr-유형 병합
C++ 유형의 맹글링 유형 이름 스트리밍 및 해당 통합
링크 타임. 이렇게 하면 LTO 개체 파일의 크기가 증가하지만 One에 대한 진단이 가능합니다.
정의 규칙 위반.
-flto-압축 수준=n
이 옵션은 작성된 중간 언어에 사용되는 압축 수준을 지정합니다.
LTO 오브젝트 파일에 적용되며 LTO 모드(-flto).
유효한 값은 0(압축 없음)에서 9(최대 압축)까지입니다. 이 밖의 값
범위는 0 또는 9로 고정됩니다. 옵션이 제공되지 않으면 기본 균형
압축 설정이 사용됩니다.
-flto-보고
링크 시간 최적화 프로그램의 작동에 대한 내부 세부 정보가 포함된 보고서를 인쇄합니다. NS
이 보고서의 내용은 버전에 따라 다릅니다. GCC에 유용하기 위한 것입니다.
개발자는 LTO 모드에서 개체 파일을 처리할 때(통해 -flto).
기본적으로 사용하지 않도록 설정되어 있습니다.
-flto-보고-wpa
처럼 -flto-보고, 그러나 Link Time Optimization의 WPA 단계에 대해서만 인쇄합니다.
-퓨즈-링커-플러그인
링크 시간 최적화 중에 링커 플러그인을 사용할 수 있습니다. 이 옵션은
골드 또는 GNU ld 2.21 또는
더 새로운.
이 옵션을 사용하면 라이브러리에서 GIMPLE 바이트 코드가 있는 개체 파일을 추출할 수 있습니다.
아카이브. 이것은 링크에 더 많은 코드를 노출시켜 최적화 품질을 향상시킵니다.
시간 최적화기. 이 정보는 외부에서 액세스할 수 있는 기호를 지정합니다.
(비 LTO 개체에 의해 또는 동적 연결 중에). 결과 코드 품질 향상
바이너리(및 숨겨진 가시성을 사용하는 공유 라이브러리)는 다음과 유사합니다.
-전체 프로그램. 참조 -flto 이 플래그의 효과에 대한 설명과
그걸 써.
이 옵션은 GCC에서 LTO 지원이 활성화되고 GCC가 활성화된 경우 기본적으로 활성화됩니다.
링커 지원 플러그인(GNU ld 2.21 이상 또는 골드)과 함께 사용하도록 구성됩니다.
-ffat-lto-객체
Fat LTO 개체는 중간 언어와
개체 코드. 이를 통해 LTO 연결 및 일반 연결 모두에 사용할 수 있습니다. 이것
옵션은 다음으로 컴파일할 때만 유효합니다. -flto 링크 시간에는 무시됩니다.
-fno-fat-lto-객체 일반 LTO에 비해 컴파일 시간이 향상되지만
LTO를 인식할 수 있는 완전한 도구 체인. 링커 플러그인을 지원하는 링커가 필요합니다.
기본 기능을 위해. 추가적으로, nm, ar and 란립 링커를 지원해야 합니다
모든 기능을 갖춘 빌드 환경을 허용하는 플러그인(정적 빌드 가능
도서관 등). GCC는 gcc-ar, gcc-nm, gcc-ranlib 전달할 래퍼
이러한 도구에 대한 올바른 옵션. non-fat LTO makefile을 사용하려면 수정해야 합니다.
그들.
디폴트는 -fno-fat-lto-객체 링커 플러그인을 지원하는 대상에서.
-f비교-제거
레지스터 할당 및 사후 레지스터 할당 명령 분할 후 식별
비교 연산과 유사한 프로세서 플래그를 계산하는 산술 명령어
그 산술을 기반으로 합니다. 가능하면 명시적 비교 작업을 제거하십시오.
이 패스는 명시적으로 나타낼 수 없는 특정 대상에만 적용됩니다.
레지스터 할당이 완료되기 전에 비교 작업을 수행합니다.
수준에서 활성화됨 -O, -O2, -O3, - 오스.
-fcprop 레지스터
레지스터 할당 및 사후 레지스터 할당 명령 분할 후 수행
스케줄링 종속성을 줄이기 위해 복사 전파 단계를 수행하고 때때로
사본을 제거하십시오.
수준에서 활성화됨 -O, -O2, -O3, - 오스.
-fprofile-수정
다중 스레드 프로그램에 대해 계측된 바이너리를 사용하여 수집된 프로필은 다음과 같을 수 있습니다.
누락된 카운터 업데이트로 인해 일관성이 없습니다. 이 옵션이 지정되면 GCC는 다음을 사용합니다.
이러한 불일치를 수정하거나 완화하기 위한 휴리스틱. 기본적으로 GCC는
일치하지 않는 프로필이 감지되면 오류 메시지가 표시됩니다.
-f프로필-디렉토리=통로
프로필 데이터 파일을 검색할 디렉터리를 다음으로 설정합니다. 통로. 이 옵션
에 의해 생성된 프로필 데이터에만 영향을 미칩니다. -fprofile 생성, -최후 범위,
-fprofile-호 그리고 사용 -fprofile-사용 and -f분기 확률 및 관련
옵션. 절대 경로와 상대 경로를 모두 사용할 수 있습니다. 기본적으로 GCC는
현재 디렉토리 통로, 따라서 프로필 데이터 파일은 다음과 같은 디렉터리에 나타납니다.
목적 파일.
-fprofile 생성
-fprofile 생성=통로
유용한 프로필을 생성하기 위해 응용 프로그램을 계측하는 데 일반적으로 사용되는 옵션을 활성화합니다.
프로필 피드백 기반 최적화로 나중에 다시 컴파일하기 위해. 당신은 사용해야합니다
-fprofile 생성 프로그램을 컴파일할 때와 링크할 때 모두.
다음 옵션이 활성화됩니다. -fprofile-호, -fprofile-값, -fvpt.
If 통로 가 지정되면 GCC는 통로 프로필 피드백 데이터 파일을 찾습니다.
만나다 -f프로필-디렉터리.
-fprofile-사용
-f프로필 사용=통로
프로필 피드백 지향 최적화 및 다음 최적화를 활성화합니다.
일반적으로 프로필 피드백을 사용할 수 있는 경우에만 수익성이 있습니다. -f분기 확률,
-fvpt, -펀롤 루프, -필 루프, -추적자, -ftree 벡터화및 ftree 루프
분포 패턴.
기본적으로 GCC는 피드백 프로필이 일치하지 않으면 오류 메시지를 내보냅니다.
소스 코드. 이 오류는 다음을 사용하여 경고로 전환할 수 있습니다. -Wcoverage-불일치.
이로 인해 최적화되지 않은 코드가 발생할 수 있습니다.
If 통로 가 지정되면 GCC는 통로 프로필 피드백 데이터 파일을 찾습니다.
만나다 -f프로필-디렉터리.
-fauto 프로필
-fauto-프로필=통로
샘플링 기반 피드백 지향 최적화 및 다음 최적화 활성화
일반적으로 프로필 피드백이 있는 경우에만 수익성이 있습니다.
-f분기 확률, -fvpt, -펀롤 루프, -필 루프, -추적자,
-ftree 벡터화, -finline-함수, -fipa-cp, -fipa-cp-클론,
-f예측-공통, -펀스위치 루프, -fgcse-재로드 후및
-ftree-루프-배포-패턴.
통로 AutoFDO 프로파일 정보를 포함하는 파일의 이름입니다. 생략하면
기본값은 fbdata.afdo 현재 디렉토리에서.
AutoFDO 프로필 데이터 파일을 생성하려면 다음을 사용하여 프로그램을 실행해야 합니다. 반환 한
지원되는 GNU/Linux 대상 시스템의 유틸리티. 자세한 내용은
<https://perf.wiki.kernel.org/>.
예 :
성능 기록 -e br_inst_retired:near_taken -b -o 성능 데이터 \
-- 귀하의 프로그램
그런 다음 create_gcov 원시 프로필 데이터를 변환할 수 있는 형식으로 변환하는 도구
GCC에서 사용합니다. 또한 프로그램의 스트립되지 않은 바이너리를 여기에 제공해야 합니다.
도구. 보다https://github.com/google/autofdo>.
예 :
create_gcov --binary=your_program.unstripped --profile=perf.data \
--gcov=프로필.afdo
다음 옵션은 부동 소수점 산술과 관련된 컴파일러 동작을 제어합니다.
이러한 옵션은 속도와 정확성 사이에서 절충합니다. 모두 구체적으로 활성화해야 합니다.
-fffloat-store
부동 소수점 변수를 레지스터에 저장하지 말고 다른 옵션을 금지하십시오.
부동 소수점 값을 레지스터 또는 메모리에서 가져오는지 여부를 변경할 수 있습니다.
이 옵션은 68000과 같은 기계에서 바람직하지 않은 과도한 정밀도를 방지합니다.
부동 레지스터(68881 중)는 "더블"이 가정하는 것보다 더 높은 정밀도를 유지합니다.
가지고. x86 아키텍처에서도 마찬가지입니다. 대부분의 프로그램에서 초과 정밀도
좋은 일만 할 수 있지만 일부 프로그램은 IEEE 플로팅의 정확한 정의에 의존합니다.
가리키다. 사용하다 -fffloat-store 이러한 프로그램의 경우 모든 파일을 저장하도록 수정한 후
변수에 적절한 중간 계산.
-fexcess-정밀도=스타일
이 옵션을 사용하면 부동 상태의 기계에서 과도한 정밀도를 추가로 제어할 수 있습니다.
포인트 레지스터는 IEEE "float" 및 "double" 유형보다 정밀도가 높으며
프로세서는 이러한 유형으로 반올림하는 작업을 지원하지 않습니다. 기본적으로,
-fexcess-정밀도=빠름 유효하다; 이것은 작업이 수행된다는 것을 의미합니다.
레지스터의 정밀도 및 유형으로 반올림할 때 예측할 수 없음
소스 코드에 지정된 작업이 수행됩니다. C를 컴파일할 때,
-fexcess-정밀도=표준 가 지정되면 초과 정밀도가 규칙을 따릅니다.
ISO C99에 명시됨; 특히 캐스트와 할당 모두 값이
의미론적 유형으로 반올림됩니다(반면 -fffloat-store 할당에만 영향을 미칩니다).
이 옵션은 다음과 같은 엄격한 준수 옵션이 있는 경우 C에 대해 기본적으로 활성화됩니다.
-표준=c99 사용.
-fexcess-정밀도=표준 C 이외의 언어에는 구현되지 않으며
효과가 있다면 -재미있는 수학 최적화 or -빠른 수학 지정됩니다. x86에서는
경우에도 효과가 없습니다. -mfpmath=sse or -mfpmath=sse+387 지정됨; 이전에
이 경우 IEEE 의미론은 과도한 정밀도 없이 적용되며 후자의 경우 반올림은 다음과 같습니다.
예측할 수없는.
-빠른 수학
옵션을 설정합니다 -fno-수학-errno, -재미있는 수학 최적화, - 유한 수학 전용,
-fno 반올림 수학, -fno-시그널링-nans and -fcx 제한 범위.
이 옵션을 사용하면 전처리기 매크로 "__FAST_MATH__"가 정의됩니다.
이 옵션은 어떤 사람도 켜져 있지 않습니다. -O 이외의 옵션 -오파스트 결과를 초래할 수 있기 때문에
IEEE 또는 ISO의 정확한 구현에 의존하는 프로그램에 대한 잘못된 출력
수학 함수에 대한 규칙/사양. 그러나 더 빠른 코드를 생성할 수 있습니다.
이러한 사양의 보증이 필요하지 않은 프로그램.
-fno-수학-errno
단일로 실행되는 수학 함수를 호출한 후 "errno"를 설정하지 마십시오.
명령(예: "sqrt"). 수학 오류에 대한 IEEE 예외에 의존하는 프로그램
처리는 IEEE 산술을 유지하면서 속도를 위해 이 플래그를 사용하기를 원할 수 있습니다.
호환성.
이 옵션은 어떤 사람도 켜져 있지 않습니다. -O 잘못된 출력을 초래할 수 있으므로 옵션
IEEE 또는 ISO의 정확한 구현에 의존하는 프로그램의 경우
수학 함수에 대한 규칙/사양. 그러나 더 빠른 코드를 생성할 수 있습니다.
이러한 사양의 보증이 필요하지 않은 프로그램.
디폴트는 -fmath-errno.
Darwin 시스템에서 수학 라이브러리는 "errno"를 설정하지 않습니다. 그러므로 이유가 없다.
컴파일러가 그럴 가능성을 고려하고, -fno-수학-errno 이다
태만.
-재미있는 수학 최적화
(a) 인수 및
결과가 유효하고 (b) IEEE 또는 ANSI 표준을 위반할 수 있습니다. 링크 타임에 사용하면,
기본 FPU 제어 단어를 변경하는 라이브러리 또는 시작 파일이 포함될 수 있습니다.
다른 유사한 최적화.
이 옵션은 어떤 사람도 켜져 있지 않습니다. -O 잘못된 출력을 초래할 수 있으므로 옵션
IEEE 또는 ISO의 정확한 구현에 의존하는 프로그램의 경우
수학 함수에 대한 규칙/사양. 그러나 더 빠른 코드를 생성할 수 있습니다.
이러한 사양의 보증이 필요하지 않은 프로그램. 활성화
-fno 부호 있는 XNUMX, -fno 트래핑 수학, -연관 수학 and - 분수 수학.
디폴트는 -fno-안전하지 않은-수학 최적화.
-연관 수학
일련의 부동 소수점 연산에서 피연산자의 재연결을 허용합니다. 이것
계산 결과를 변경하여 ISO C 및 C++ 언어 표준을 위반할 수 있습니다.
참고: 재정렬은 XNUMX의 부호를 변경하고 NaN을 무시하고 금지 또는
언더플로 또는 오버플로 생성(따라서 반올림에 의존하는 코드에서는 사용할 수 없습니다.
"(x + 2**52) - 2**52"와 같은 동작. 또한 부동 소수점 비교를 재정렬하고
따라서 순서 비교가 필요한 경우에는 사용할 수 없습니다. 이 옵션에는 다음이 필요합니다.
두 -fno 부호 있는 XNUMX and -fno 트래핑 수학 유효하다. 게다가 하지 않는다.
많은 의미 - 반올림 수학. Fortran의 경우 옵션은 다음과 같은 경우 자동으로 활성화됩니다.
두 -fno 부호 있는 XNUMX and -fno 트래핑 수학 유효합니다.
디폴트는 -fno 연관 수학.
- 분수 수학
다음과 같은 경우 값으로 나누는 대신 값의 역수를 사용할 수 있습니다.
최적화를 가능하게 합니다. 예를 들어 "x / y"는 "x * (1/y)"로 대체될 수 있습니다.
"(1/y)"가 공통 하위 표현식 제거 대상인 경우 유용합니다. 이
정밀도를 잃고 값에서 작동하는 플롭 수를 늘립니다.
디폴트는 -fno-역수-수학.
- 유한 수학 전용
인수 및
결과는 NaN 또는 +-Infs가 아닙니다.
이 옵션은 어떤 사람도 켜져 있지 않습니다. -O 잘못된 출력을 초래할 수 있으므로 옵션
IEEE 또는 ISO의 정확한 구현에 의존하는 프로그램의 경우
수학 함수에 대한 규칙/사양. 그러나 더 빠른 코드를 생성할 수 있습니다.
이러한 사양의 보증이 필요하지 않은 프로그램.
디폴트는 -fno-finite-math-only.
-fno 부호 있는 XNUMX
XNUMX의 부호를 무시하는 부동 소수점 산술에 대한 최적화를 허용합니다.
IEEE 산술은 고유한 +0.0 및 -0.0 값의 동작을 지정합니다.
x+0.0 또는 0.0*x와 같은 표현식의 단순화를 금지합니다.
- 유한 수학 전용). 이 옵션은 XNUMX 결과의 부호가
중요한.
디폴트는 -f부호가 붙은 XNUMX.
-fno 트래핑 수학
부동 소수점 연산이 사용자에게 표시되는 것을 생성할 수 없다고 가정하는 컴파일 코드
트랩. 이러한 트랩에는 XNUMX으로 나누기, 오버플로, 언더플로, 부정확한 결과 및
잘못된 작업. 이 옵션에는 다음이 필요합니다. -fno-시그널링-nans 유효하다.
이 옵션을 설정하면 "논스톱" IEEE 산술에 의존하는 경우 더 빠른 코드를 허용할 수 있습니다.
예를 들어.
이 옵션은 절대로 켜서는 안 됩니다. -O 결과를 초래할 수 있으므로 옵션
IEEE 또는 ISO의 정확한 구현에 의존하는 프로그램에 대한 잘못된 출력
수학 함수에 대한 규칙/사양.
디폴트는 -프래핑-수학.
- 반올림 수학
기본 부동 소수점 반올림을 가정하는 변환 및 최적화 비활성화
행동. 이것은 모든 부동 소수점에서 정수로의 변환에 대해 XNUMX으로 반올림되며,
다른 모든 산술 절단에 대해 가장 가까운 값으로 반올림합니다. 이 옵션은
FP 반올림 모드를 동적으로 변경하거나
기본이 아닌 반올림 모드로 실행됩니다. 이 옵션은
컴파일 시 부동 소수점 표현식(반올림 모드의 영향을 받을 수 있음)
및 부호 종속 존재 시 안전하지 않은 산술 변환
반올림 모드.
디폴트는 -fno 반올림 수학.
이 옵션은 실험적이며 현재 모든 GCC 비활성화를 보장하지 않습니다.
반올림 모드의 영향을 받는 최적화 GCC의 향후 버전은 다음을 제공할 수 있습니다.
C99의 "FENV_ACCESS" pragma를 사용하여 이 설정을 미세하게 제어합니다. 이 명령줄
옵션은 "FENV_ACCESS"의 기본 상태를 지정하는 데 사용됩니다.
-fsignaling-nans
IEEE 시그널링 NaN이 동안 사용자가 볼 수 있는 트랩을 생성할 수 있다고 가정하고 코드를 컴파일하십시오.
부동 소수점 연산. 이 옵션을 설정하면 변경될 수 있는 최적화가 비활성화됩니다.
신호 NaN으로 볼 수 있는 예외의 수입니다. 이 옵션은 다음을 의미합니다.
-프래핑-수학.
이 옵션을 사용하면 전처리기 매크로 "__SUPPORT_SNAN__"이 정의됩니다.
디폴트는 -fno-시그널링-nans.
이 옵션은 실험적이며 현재 모든 GCC 비활성화를 보장하지 않습니다.
신호 NaN 동작에 영향을 주는 최적화.
-fsingle-precision-상수
암시적으로 변환하는 대신 부동 소수점 상수를 단정밀도로 처리합니다.
배정밀도 상수로 변환합니다.
-fcx 제한 범위
활성화되면 이 옵션은 다음과 같은 경우 범위 축소 단계가 필요하지 않음을 나타냅니다.
복잡한 분할을 수행합니다. 또한 결과에 대한 확인이 없습니다.
복잡한 곱셈 또는 나눗셈은 "NaN + I*NaN"이며,
그 경우의 상황. 기본값은 -fno-cx-제한된 범위에 의해 활성화되지만
-빠른 수학.
이 옵션은 ISO C99 "CX_LIMITED_RANGE" pragma의 기본 설정을 제어합니다.
그럼에도 불구하고 이 옵션은 모든 언어에 적용됩니다.
-fcx-fortran-규칙
복잡한 곱셈과 나눗셈은 Fortran 규칙을 따릅니다. 범위 감소는 다음과 같이 수행됩니다.
복잡한 분할의 일부이지만 복잡한 분할의 결과가
곱셈 또는 나눗셈은 "NaN + I*NaN"이며 상황을 구하려는 시도입니다.
그 경우.
디폴트는 -fno-cx-fortran-규칙.
다음 옵션은 성능을 향상시킬 수 있지만 그렇지 않은 최적화를 제어합니다.
누구에 의해 활성화 -O 옵션. 이 섹션에는 다음을 생성할 수 있는 실험적 옵션이 포함되어 있습니다.
깨진 코드.
-f분기 확률
로 컴파일된 프로그램을 실행한 후 -fprofile-호, 두 번째로 컴파일할 수 있습니다.
사용 -f분기 확률, 횟수에 따라 최적화를 개선하기 위해
각 지점을 가져갔다. 프로그램을 컴파일할 때 -fprofile-호 종료, 저장
호 실행은 다음과 같은 파일로 계산됩니다. 소스 이름.gcda 각 소스 파일에 대해 NS
이 데이터 파일의 정보는 생성된
코드이므로 둘 다에 대해 동일한 소스 코드와 동일한 최적화 옵션을 사용해야 합니다.
편집.
와 -f분기 확률, GCC는 REG_BR_PROB 각각에 대한 참고 JUMP_INSN and
CALL_INSN. 최적화를 개선하는 데 사용할 수 있습니다. 현재, 그들은 만 사용됩니다
한 곳에서: 에서 reorg.c, 분기가 가장 가능성이 높은 경로를 추측하는 대신
받아, REG_BR_PROB 값은 어떤 경로가 더 많이 사용되는지 정확하게 결정하는 데 사용됩니다.
자주.
-fprofile-값
와 결합하면 -fprofile-호, 코드를 추가하여 값에 대한 일부 데이터가
프로그램의 표현을 수집합니다.
와 -f분기 확률, 프로파일링 값에서 수집한 데이터를 다시 읽습니다.
최적화에 사용하기 위한 표현식입니다.
다음으로 활성화됨 -fprofile 생성 and -fprofile-사용.
-fprofile-재주문-기능
프로필 계측을 기반으로 한 함수 재정렬은 처음 실행 시 수집
함수를 만들고 이러한 함수를 오름차순으로 정렬합니다.
다음으로 활성화됨 -fprofile-사용.
-fvpt
와 결합하면 -fprofile-호, 이 옵션은 컴파일러에 코드를 추가하도록 지시합니다.
표현식의 값에 대한 정보를 수집합니다.
와 -f분기 확률, 수집된 데이터를 다시 읽고 실제로 수행합니다.
이를 기반으로 최적화합니다. 현재 최적화에는 전문화가 포함됩니다.
분모 값에 대한 지식을 사용하는 나눗셈 연산.
-frename 레지스터
남아 있는 레지스터를 사용하여 예약된 코드에서 잘못된 종속성을 피하려고 시도합니다.
레지스터 할당 후 오버. 이 최적화는 많은 프로세서에 가장 유리합니다.
레지스터의. 대상이 채택한 디버그 정보 형식에 따라,
그러나 변수가 더 이상 "홈"에 머물지 않기 때문에 디버깅이 불가능할 수 있습니다.
등록하다".
기본적으로 활성화됨 -펀롤 루프 and -필 루프.
-fschedule-퓨전
명령 스트림을 통해 대상 종속 전달을 수행하여 명령을 예약합니다.
대상 머신이 다음과 같은 경우 더 효율적으로 실행할 수 있기 때문에
명령 흐름에서 서로 인접합니다.
수준에서 활성화됨 -O2, -O3, - 오스.
-추적자
꼬리 복제를 수행하여 수퍼 블록 크기를 확대합니다. 이 변환은 단순화
다른 최적화가 더 나은 작업을 수행할 수 있도록 하는 기능의 제어 흐름.
다음으로 활성화됨 -fprofile-사용.
-펀롤 루프
반복 횟수가 컴파일 시간 또는 컴파일 시간에 결정될 수 있는 루프를 풉니다.
루프 진입. -펀롤 루프 의미하다 -frerun-cse-후-루프, -fweb and
-frename 레지스터. 또한 완전한 루프 필링(즉,
반복 횟수가 적은 루프). 이 옵션은 코드를 더 크게 만들고
더 빠르게 실행할 수도 있고 그렇지 않을 수도 있습니다.
다음으로 활성화됨 -fprofile-사용.
-Funroll-All-루프
루프가 다음과 같을 때 반복 횟수가 불확실하더라도 모든 루프를 풉니다.
들어갔다. 이렇게 하면 일반적으로 프로그램이 더 느리게 실행됩니다. -Funroll-All-루프 를 의미한다
같은 옵션 -펀롤 루프.
-필 루프
많이 롤링되지 않는 충분한 정보가 있는 루프를 벗깁니다(
프로필 피드백). 또한 완전한 루프 필링(즉,
반복 횟수가 적은 루프).
다음으로 활성화됨 -fprofile-사용.
-fmove-loop-불변
RTL 루프 옵티마이저에서 루프 불변 모션 패스를 활성화합니다. 수준에서 활성화됨
-O1
-펀스위치 루프
루프 불변 조건이 있는 분기를 루프 외부로 이동합니다.
두 가지의 루프(조건의 결과에 따라 수정됨).
-ffunction-섹션
-fdata 섹션
대상이
임의의 섹션을 지원합니다. 함수 이름 또는 데이터 항목 이름
출력 파일에서 섹션의 이름을 결정합니다.
링커가 최적화를 수행하여 개선할 수 있는 시스템에서 이 옵션을 사용하십시오.
명령 공간에서 참조의 위치. ELF 객체를 사용하는 대부분의 시스템
형식 및 Solaris 2를 실행하는 SPARC 프로세서에는 이러한 최적화가 포함된 링커가 있습니다.
AIX는 미래에 이러한 최적화를 가질 수 있습니다.
그렇게 함으로써 상당한 이점이 있는 경우에만 이 옵션을 사용하십시오. 때를
이러한 옵션을 지정하면 어셈블러와 링커가 더 큰 개체와 실행 파일을 만듭니다.
파일 및 속도도 느립니다. 당신은 사용할 수 없습니다 gprof 이것을 지정하면 모든 시스템에서
옵션이며 이 옵션과
-g.
-fbranch-대상-로드-최적화
프롤로그/에필로그 스레딩 전에 분기 대상 레지스터 로드 최적화를 수행합니다.
대상 레지스터의 사용은 일반적으로 다시 로드하는 동안에만 노출될 수 있으므로 호이스팅
루프 밖으로 로드하고 블록 간 스케줄링을 수행하려면 별도의 최적화가 필요합니다.
패스.
-fbranch-대상-로드-최적화2
프롤로그/에필로그 스레딩 후 분기 대상 레지스터 로드 최적화를 수행합니다.
-fbtr-bb-독점
분기 대상 레지스터 로드 최적화를 수행할 때 분기 대상을 재사용하지 마십시오.
모든 기본 블록 내에서 등록합니다.
-fstack 보호기
스택 스매싱 공격과 같은 버퍼 오버플로를 확인하기 위해 추가 코드를 내보냅니다. 이것
취약한 개체가 있는 함수에 가드 변수를 추가하여 수행됩니다. 이것
"alloca"를 호출하는 함수와 8바이트보다 큰 버퍼가 있는 함수를 포함합니다.
가드는 함수가 입력될 때 초기화되고
기능이 종료됩니다. 가드 체크가 실패하면 오류 메시지가 출력되고 프로그램이
출구.
-fstack-프로텍터-all
처럼 -fstack 보호기 모든 기능이 보호된다는 점을 제외하고.
-fstack-보호자-강한
처럼 -fstack 보호기 그러나 보호해야 할 추가 기능이 포함되어 있습니다. ---
로컬 배열 정의가 있거나 로컬 프레임 주소에 대한 참조가 있습니다.
-fstack-보호자-명시적
처럼 -fstack 보호기 그러나 다음이 있는 기능만 보호합니다.
"stack_protect" 속성
-fstdarg-opt
가변 인수 함수의 사용과 관련하여 프롤로그를 최적화합니다.
인수.
참고: Ubuntu 14.10 이상 버전에서는 -fstack-보호자-강한 에 의해 활성화됩니다.
C, C++, ObjC, ObjC++의 기본값(아무것도 없는 경우) -fno-스택 보호기, -nostdlib,도 아니다
-프리스탠딩 발견됩니다.
-f섹션 앵커
공유 "앵커"를 사용하여 기호 주소 계산의 수를 줄이십시오.
주변 물체를 나타내는 기호. 이 변환은 숫자를 줄이는 데 도움이 될 수 있습니다.
일부 대상에 대한 GOT 항목 및 GOT 액세스 수.
예를 들어 다음 함수 "foo"의 구현:
정적 int, b, c;
int foo (void) { return + b + c; }
일반적으로 세 변수 모두의 주소를 계산하지만 다음과 같이 컴파일하면
-f섹션 앵커, 대신 공통 앵커 포인트에서 변수에 액세스합니다. NS
효과는 다음 의사 코드(유효한 C가 아님)와 유사합니다.
int foo(무효)
{
레지스터 int *xr = &x;
반환 xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
}
모든 대상이 이 옵션을 지원하는 것은 아닙니다.
--매개변수 name=가치
어떤 곳에서는 GCC가 다양한 상수를 사용하여 최적화의 양을 제어합니다.
수행. 예를 들어, GCC는 특정 이상을 포함하는 함수를 인라인하지 않습니다.
지시의 수. 명령줄에서 이러한 상수 중 일부를 제어할 수 있습니다.
를 사용하여 --매개변수 옵션을 선택합니다.
특정 매개변수의 이름과 값의 의미는
컴파일러의 내부이며 향후 예고 없이 변경될 수 있습니다.
출시.
각각의 경우, 가치 정수입니다. 허용되는 선택 name 위치 :
예측 가능한 분기 결과
이 임계값보다 낮은 확률로 분기를 취할 것으로 예상되는 경우
(백분율로), 잘 예측 가능한 것으로 간주됩니다. 기본값은 10입니다.
최대 크로스 점프 에지
교차 점프를 위해 고려할 최대 들어오는 가장자리 수입니다. 알고리즘
에 의해 사용되는 -크로스점프 각 블록으로 들어오는 에지의 수는 O(N^2)입니다.
값을 늘리면 최적화가 더 적극적으로 수행되어 컴파일 시간이 늘어납니다.
실행 파일 크기가 약간 개선되면 증가합니다.
min-crossjump-inns
두 블록의 끝에서 일치해야 하는 최소 명령어 수
크로스 점프가 수행되기 전에. 이 값은 다음과 같은 경우 무시됩니다.
여기서 교차 점프되는 블록의 모든 명령어가 일치합니다. NS
기본값은 5입니다.
최대 성장 복사-bb-insns
대신 기본 블록을 복사할 때 최대 코드 크기 확장 계수
점프. 확장은 점프 명령을 기준으로 합니다. 기본값은
8.
최대-고토-중복-insns
로 점프하는 블록에 복제할 최대 명령어 수
계산된 고토. 여러 패스에서 O(N^2) 동작을 피하기 위해 GCC 요인
컴파일 프로세스 초기에 goto를 계산하고 최대한 늦게 분해합니다.
가능한. 최대값 이하의 기본 블록 끝에서만 계산된 점프
goto-duplication-insns는 팩터링되지 않습니다. 기본값은 8입니다.
최대 지연-슬롯-insn-검색
명령을 찾을 때 고려해야 할 최대 명령 수
지연 슬롯을 채웁니다. 이 임의의 명령 수보다 많은 경우
검색하면 지연 슬롯을 채우는 데 따른 시간 절약이 최소화되므로 중지하십시오.
수색. 값을 높이면 더 적극적인 최적화를 의미하므로
실행 시간의 약간의 개선으로 컴파일 시간이 증가합니다.
최대 지연 슬롯 라이브 검색
지연 슬롯을 채우려고 할 때 고려해야 할 최대 명령 수
유효한 라이브 레지스터 정보가 있는 블록을 검색할 때. 이것을 증가
임의로 선택한 값은 보다 적극적인 최적화를 의미하며,
컴파일 시간. 지연 슬롯 코드가 다음과 같을 때 이 매개변수를 제거해야 합니다.
제어 흐름 그래프를 유지하기 위해 다시 작성되었습니다.
최대 gcse 메모리
수행하기 위해 할당할 수 있는 대략적인 최대 메모리 양
전역 공통 하위 표현식 제거 최적화. 메모리가 더 많은 경우
지정된 필수 항목인 경우 최적화가 수행되지 않습니다.
최대 gcse 삽입 비율
삭제에 대한 표현식 삽입의 비율이 이 값보다 클 경우
임의의 표현식이 있는 경우 RTL PRE가 표현식을 삽입하거나 제거하여 그대로 둡니다.
명령 스트림에서 부분적으로 중복된 계산. 기본값은
20.
최대 보류 목록 길이
플러시하기 전에 스케줄링이 허용하는 최대 보류 종속성 수
현재 상태 및 다시 시작합니다. 분기 또는 호출이 거의 없는 큰 함수는
불필요하게 메모리와 리소스를 소비하는 지나치게 큰 목록을 만듭니다.
최대 모듈로 역추적 시도
모듈로일 때 스케줄러가 수행해야 하는 최대 역추적 시도 횟수
루프 스케줄링. 값이 클수록 컴파일 시간이 기하급수적으로 늘어날 수 있습니다.
최대 인라인-insns-단일
여러 매개변수가 GCC에서 사용되는 트리 인라이너를 제어합니다. 이 숫자는
최대 명령어 수(GCC의 내부 표현으로 계산)
트리 인라이너가 인라이닝을 위해 고려하는 단일 함수. 이것은 영향을 미칩니다
인라인으로 선언된 함수와 클래스 선언에서 구현된 메서드(C++).
기본값은 400입니다.
최대 인라인-insns-자동
때 사용 -finline-함수 (포함 된 -O3), 많은 기능
그렇지 않으면 컴파일러에서 인라인으로 고려되지 않는지 조사합니다. NS
이러한 기능, 기능에 비해 다른(더 제한적인) 제한
선언된 인라인을 적용할 수 있습니다. 기본값은 40입니다.
인라인 최소 속도 향상
호출자 + 호출 수신자 런타임의 예상 성능 향상이 이를 초과하는 경우
임계값(현재)에 대한 제한에 관계없이 함수를 인라인할 수 있습니다.
--매개변수 최대 인라인-insns-단일 and --매개변수 최대 인라인-insns-자동.
대기능 여관
정말 큰 기능을 지정하는 제한. 이 제한보다 큰 기능의 경우
인라인 후 인라인은 다음으로 제한됩니다. --매개변수 큰 기능 성장. 이
매개변수는 주로
백엔드에서 사용하는 선형 알고리즘. 기본값은 2700입니다.
큰 기능 성장
인라인으로 인한 대형 함수의 최대 증가를 백분율로 지정합니다. NS
기본값은 100으로 큰 기능 증가를 원래의 2.0배로 제한합니다.
크기.
대형 여관
큰 번역 단위를 지정하는 제한입니다. 단위 인라인으로 인한 성장
이 제한보다 큰 것은 다음으로 제한됩니다. --매개변수 인라인 단위 성장. 소형 유닛용
이것은 너무 빡빡할 수 있습니다. 예를 들어, 함수 A로 구성된 단위를 고려하십시오.
그것은 인라인이고 B는 A를 세 번 호출합니다. B가 A에 비해 작다면,
단위의 성장은 300\%이지만 이러한 인라인은 매우 정상적입니다. 매우 큰 경우
인라인 가능한 작은 기능으로 구성된 단위, 그러나 전체 단위 성장
코드 크기의 기하급수적인 폭발을 피하기 위해 제한이 필요합니다. 따라서 더 작은
단위, 크기가 다음으로 증가합니다. --매개변수 대형 여관 신청하기 전에 --매개변수
인라인 단위 성장. 기본값은 10000입니다.
인라인 단위 성장
인라인으로 인한 컴파일 단위의 최대 전체 증가를 지정합니다. NS
기본값은 단위 증가를 원래 크기의 20배로 제한하는 1.2입니다. 추운
기능(속성 또는 프로필 피드백을 통해 콜드로 표시됨)은
단위 크기로 계산됩니다.
ipcp 단위 성장
프로시저 간으로 인한 컴파일 단위의 최대 전체 증가를 지정합니다.
지속적인 전파. 기본값은 10이며 단위 성장을 1.1로 제한합니다.
원래 크기의 배.
대형 스택 프레임
큰 스택 프레임을 지정하는 제한입니다. 알고리즘을 인라인하는 동안
이 한계를 너무 많이 초과하지 않도록. 기본값은 256바이트입니다.
대형 스택 프레임 성장
인라인으로 인한 대형 스택 프레임의 최대 증가를 백분율로 지정합니다.
기본값은 1000으로 큰 스택 프레임 증가를 11배로 제한합니다.
원래 크기.
최대 인라인-insns-재귀
최대 인라인-insns-재귀-자동
자체 복사본의 최대 명령 수를 지정합니다.
재귀 인라인 함수는 재귀 인라인을 수행하여 성장할 수 있습니다.
--매개변수 최대 인라인-insns-재귀 인라인으로 선언된 함수에 적용됩니다. 을위한
인라인으로 선언되지 않은 함수, 재귀 인라인은 다음 경우에만 발생합니다.
-finline-함수 (포함 된 -O3) 사용 가능; --매개변수 최대-인라인-insns-
재귀 자동 대신 적용됩니다. 기본값은 450입니다.
최대 인라인 재귀 깊이
최대 인라인 재귀 깊이 자동
재귀 인라인에 사용되는 최대 재귀 깊이를 지정합니다.
--매개변수 최대 인라인 재귀 깊이 인라인으로 선언된 함수에 적용됩니다. 을위한
인라인으로 선언되지 않은 함수, 재귀 인라인은 다음 경우에만 발생합니다.
-finline-함수 (포함 된 -O3) 사용 가능; --매개변수 최대 인라인 재귀
깊이 자동 대신 적용됩니다. 기본값은 8입니다.
최소 인라인 재귀 확률
재귀 인라인은 깊은 재귀가 있는 함수에 대해서만 수익성이 있습니다.
평균을 내고 재귀 깊이가 적은 함수에 손상을 줄 수 있습니다.
다른 옵티마이저에 대한 프롤로그 크기 또는 함수 본문의 복잡성.
프로필 피드백을 사용할 수 있는 경우(참조 -fprofile 생성) 실제 재귀
주어진 호출을 통해 함수가 재귀할 확률에서 깊이를 추측할 수 있습니다.
표현. 이 매개변수는 인라인을 다음과 같은 호출 표현식으로만 제한합니다.
확률이 주어진 임계값(퍼센트)을 초과합니다. 기본값은 10입니다.
얼리 인라이닝 인스
초기 인라이너가 만들 수 있는 성장을 지정합니다. 사실상 양을 증가시킨다.
추상화 패널티가 큰 코드에 대한 인라인 처리. 기본값은 14입니다.
최대 초기 인라이너 반복
초기 인라이너의 반복 제한. 이것은 기본적으로
중첩 간접 호출은 초기 인라이너가 해결할 수 있습니다. 더 깊은 사슬은 여전히
늦은 인라이닝으로 처리됩니다.
comdat 공유 확률
comdat 가시성이 있는 C++ 인라인 함수가 다음과 같은 확률(퍼센트)
여러 컴파일 단위에서 공유됩니다. 기본값은 20입니다.
프로필 기능 내부 ID
프로파일 데이터베이스에서 함수 내부 ID를 사용할지 여부를 제어하는 매개변수
조회. 값이 0이면 컴파일러는 함수를 기반으로 하는 id를 사용합니다.
어셈블러 이름 및 파일 이름으로 인해 이전 프로필 데이터가 소스에 더 잘 견딥니다.
기능 재정렬 등과 같은 변경 사항. 기본값은 0입니다.
최소 벡터 루프 경계
루프가 벡터화되지 않는 최소 반복 횟수
-ftree 벡터화 사용. 벡터화 후 반복 횟수는 다음과 같아야 합니다.
벡터화를 허용하려면 이 옵션에서 지정한 값보다 커야 합니다. NS
기본값은 0입니다.
gcse 비용 거리 비율
식을 이동할 수 있는 최대 거리 계산의 배율 인수
GCSE 최적화. 이것은 현재 코드 호이스팅 패스에서만 지원됩니다.
비율이 클수록 간단한 코드 호이스팅이 더 공격적입니다.
표현식, 즉 비용이 다음보다 작은 표현식 gcse-무제한-
비용. 0을 지정하면 단순 표현식의 호이스팅이 비활성화됩니다. 기본값은
10.
gcse-무제한 비용
비용은 대략 하나의 일반적인 기계 명령 비용으로 측정됩니다.
GCSE 최적화는 표현식이 이동할 수 있는 거리를 제한하지 않습니다.
이것은 현재 코드 호이스팅 패스에서만 지원됩니다. 비용이 적게 들수록,
더 공격적인 코드 호이스팅입니다. 0을 지정하면 모든 표현식이
무제한 거리를 여행하십시오. 기본값은 3입니다.
최대 호이스트 깊이
호이스트할 표현식에 대한 도미네이터 트리의 검색 깊이입니다. 이것은 사용
호이스팅 알고리즘에서 0차 동작을 피하기 위해. XNUMX의 값은 제한되지 않습니다.
검색할 수 있지만 거대한 기능의 컴파일 속도가 느려질 수 있습니다. 기본값
30입니다.
최대 꼬리 병합 비교
bb를 비교할 유사한 bb의 최대량입니다. 이것은 피하기 위해 사용됩니다
트리 테일 병합의 10차 동작. 기본값은 XNUMX입니다.
최대 꼬리 병합 반복
함수에 대한 전달의 최대 반복 횟수입니다. 이것은 사용됩니다
트리 테일 병합에서 컴파일 시간을 제한합니다. 기본값은 2입니다.
최대 언롤링된 기능
루프를 풀어야 할 수 있는 최대 명령어 수입니다. 루프의 경우
롤링되지 않은 경우 이 매개변수는 루프 코드가 몇 번
풀렸다.
최대-평균-unrolled-insns
실행 확률에 따라 편향된 최대 명령어 수
루프를 풀어야 할 수도 있습니다. 루프가 펼쳐지면 이 매개변수도
루프 코드가 펼쳐지는 횟수를 결정합니다.
최대 언롤 시간
단일 루프의 최대 언롤링 수입니다.
최대 껍질을 벗긴 기능
루프를 제거해야 할 수 있는 최대 명령어 수입니다. 루프의 경우
이 매개변수는 루프 코드가 벗겨지는 횟수도 결정합니다.
최대 필 시간
단일 루프의 최대 필링 수입니다.
최대 껍질 분기
벗겨진 시퀀스를 통한 핫 경로의 최대 분기 수입니다.
최대-완전-필링-insns
완전히 벗겨진 루프의 최대 인스 수입니다.
최대 완전 박리 시간
완전한 필링에 적합한 루프의 최대 반복 횟수입니다.
최대 완전 껍질 루프 중첩 깊이
완전한 필링에 적합한 루프 네스트의 최대 깊이.
최대-unswitch-insns
전환되지 않은 루프의 최대 insns 수입니다.
최대 스위치 해제 수준
단일 루프에서 전환되지 않은 최대 분기 수입니다.
비싸다
루프 불변 모션에서 값비싼 표현식의 최소 비용.
iv-모든 후보를 고려
모든 후보가 그 이하인 유도 변수의 후보 수에 따라 달라집니다.
유도 변수 최적화의 각 용도에 대해 고려됩니다. 만일 거기에
이보다 많은 후보자, 가장 관련성이 높은 후보자만 피하는 것으로 간주됩니다.
XNUMX차 시간 복잡도.
iv-최대 고려 용도
유도 변수 최적화는 더 많은 유도를 포함하는 루프를 포기합니다.
변수 사용.
iv-항상 정리할 수 있습니다.
집합의 후보 수가 이 값보다 작으면 항상
새 항목을 추가할 때 세트에서 불필요한 ivs를 제거하십시오.
scev-max-expr-크기
스칼라 진화 분석기에서 사용되는 표현식의 크기에 따라 달라집니다. 크기가 큰
표현은 분석기를 느리게 합니다.
scev-max-expr-복잡도
스칼라 진화 분석기의 표현식의 복잡성에 구속됩니다.
복잡한 표현식은 분석기를 느리게 만듭니다.
오메가 최대 변수
Omega 제약 시스템의 최대 변수 수입니다. 기본값
128입니다.
Omega-max-geqs
Omega 제약 시스템의 최대 부등식 수입니다. 기본값
값은 256입니다.
오메가-맥스-eqs
Omega 제약 시스템의 최대 등식 수입니다. 기본값
128입니다.
오메가-맥스-와일드 카드
Omega 솔버가 삽입할 수 있는 최대 와일드카드 변수 수입니다.
기본값은 18입니다.
오메가 해시 테이블 크기
Omega 솔버의 해시 테이블 크기입니다. 기본값은 550입니다.
오메가 맥스 키
Omega 솔버가 사용하는 최대 키 수입니다. 기본값은 500입니다.
오메가 제거 중복 제약
1로 설정하면 비용이 많이 드는 방법을 사용하여 모든 중복 제약 조건을 제거합니다. NS
기본값은 0입니다.
vect-max-version-for-alignment-checks
루프를 수행할 때 수행할 수 있는 런타임 검사의 최대 수
벡터라이저에서 정렬을 위한 버전 관리.
vect-max-version-별칭-검사
루프를 수행할 때 수행할 수 있는 런타임 검사의 최대 수
벡터라이저에서 별칭에 대한 버전 관리.
vect-max-필링-포-정렬
벡터라이저에 대한 액세스 정렬을 향상시키기 위한 최대 루프 필 수입니다. 값
-1은 '제한 없음'을 의미합니다.
추적할 최대 반복 횟수
분석을 위한 무차별 대입 알고리즘 루프의 최대 반복 횟수
루프의 반복 횟수를 평가하려고 합니다.
뜨거운 bb-count-ws-permille
기본 블록 프로필 수는 주어진 결과에 기여하는 경우 핫으로 간주됩니다.
전체 프로파일 실행의 permillage(즉, 0...1000)입니다.
핫 bb 주파수 분수
기본 블록 실행의 진입 블록 빈도의 비율을 선택하십시오.
기본 블록이 주어진 기능은 핫으로 간주되어야 합니다.
최대 예측 반복
정적으로 예측하는 최대 루프 반복 횟수입니다. 이것은 유용합니다
함수에 경계가 알려진 단일 루프와 다른 루프가 포함된 경우
알 수 없는 경계로. 알려진 반복 횟수는 올바르게 예측되지만,
알 수 없는 반복 횟수의 평균은 대략 10입니다. 이는 루프가
경계가 없는 것은 다른 것에 비해 인위적으로 차갑게 보입니다.
내장 기대 확률
표현식이 지정된 값을 가질 확률을 제어합니다. 이것
매개변수는 백분율(즉, 0 ... 100)을 입력으로 사용합니다. 기본 확률
90의 경험적으로 얻어진다.
정렬 임계값
기본 블록의 최대 실행 빈도의 일부를 선택하십시오.
기본 블록을 정렬하는 기능입니다.
정렬 루프 반복
선택한 반복 횟수 이상을 반복할 것으로 예상되는 루프가 정렬됩니다.
추적자 동적 범위
추적자 동적 적용 범위 피드백
이 값은 주어진 비율의 슈퍼블록 형성을 제한하는 데 사용됩니다.
실행된 명령어를 다룹니다. 이것은 불필요한 코드 크기 확장을 제한합니다.
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 추적자 동적 적용 범위 피드백 매개변수는 프로파일 피드백이 있을 때만 사용됩니다.
사용할 수 있습니다. 실제 프로필(정적으로 추정된 프로필과 반대)은 다음과 같습니다.
임계 값이 더 큰 값을 허용하는 훨씬 덜 균형.
추적자 최대 코드 성장
코드 성장이 주어진 백분율에 도달하면 꼬리 중복을 중지하십시오. 이것은
대부분의 중복이 나중에 크로스에서 제거되기 때문에 다소 인위적인 제한
점핑하므로 원하는 코드 증가보다 훨씬 높은 값으로 설정할 수 있습니다.
추적자 최소 분기 비율
최상의 에지의 역확률이 이보다 작으면 역성장을 중지합니다.
임계값(퍼센트).
추적자 최소 분기 비율
추적기 최소 분기 비율 피드백
최상의 에지의 확률이 이 임계값보다 낮으면 앞으로 성장을 중지합니다.
비슷하게 추적자 동적 범위 두 개의 값이 있으며 하나는 컴파일용입니다.
프로필 피드백용과 없는 컴파일용 하나. 컴파일 값
프로필 피드백은 더 보수적이어야 합니다.
효과적인 추적자.
최대 cse 경로 길이
CSE가 고려하는 경로의 최대 기본 블록 수입니다. 기본값은 10입니다.
최대 cse-insns
플러시하기 전에 CSE가 처리하는 최대 명령어 수입니다. 기본값은
1000.
ggc-분-확장
GCC는 가비지 수집기를 사용하여 자체 메모리 할당을 관리합니다. 이 매개변수
가비지 수집기의 힙이 있어야 하는 최소 백분율을 지정합니다.
컬렉션 간에 확장할 수 있습니다. 이것을 조정하면 컴파일 속도가 향상될 수 있습니다.
코드 생성에는 영향을 미치지 않습니다.
기본값은 30% + 70% * (RAM/1GB)이며 RAM >= 100GB인 경우 상한은 1%입니다.
"getrlimit"를 사용할 수 있는 경우 "RAM"이라는 개념은 실제 RAM 중 가장 작은 것이며
"RLIMIT_DATA" 또는 "RLIMIT_AS". GCC가 특정 메모리에서 RAM을 계산할 수 없는 경우
플랫폼에서는 30%의 하한이 사용됩니다. 이 매개변수를 설정하고 gc-분-
쌓다 XNUMX으로 설정하면 모든 기회에서 전체 수집이 발생합니다. 이것은
매우 느리지만 디버깅에 유용할 수 있습니다.
ggc-분-힙 크기
귀찮게 수집을 시작하기 전의 가비지 수집기 힙의 최소 크기
쓰레기. 힙이 확장된 후 첫 번째 컬렉션이 발생합니다. ggc-분-확장%
그 너머 ggc-분-힙 크기. 다시 말하지만, 이것을 조정하면 컴파일 속도가 향상될 수 있으며,
코드 생성에 영향을 미치지 않습니다.
기본값은 RAM/8, RLIMIT_RSS 또는
RLIMIT_DATA 또는 RLIMIT_AS는 초과되지 않지만 하한은 4096입니다.
(131072MB) 및 상한 128(XNUMXMB). GCC가 불가능한 경우
특정 플랫폼에서 RAM을 계산하기 위해 하한이 사용됩니다. 이것을 설정
매우 큰 매개변수는 가비지 수집을 효과적으로 비활성화합니다. 이것을 설정
매개 변수 및 ggc-분-확장 XNUMX으로 설정하면 매 시간마다 전체 수집이 발생합니다.
기회를 제공합니다.
최대 다시 로드 검색-insns
명령어 재로드의 최대 횟수는 동등한 항목을 역으로 찾아야 합니다.
등록하다. 값을 높이면 더 적극적인 최적화를 의미하므로
약간 더 나은 성능으로 컴파일 시간이 증가합니다. 기본값
값은 100입니다.
최대 cselib 메모리 위치
cselib가 고려해야 하는 최대 메모리 위치 수.
값을 늘리면 최적화가 더 적극적으로 수행되어 컴파일 시간이 늘어납니다.
약간 더 나은 성능으로 증가합니다. 기본값은 500입니다.
재정렬 블록 복제
재정렬-블록-중복-피드백
무조건 사용 여부를 결정하기 위해 기본 블록 재정렬 패스에서 사용
대상에서 코드를 분기하거나 복제합니다. 코드가 복제될 때
예상 크기가 이 값에 예상 크기를 곱한 것보다 작습니다.
프로그램의 핫스팟에서 무조건 점프.
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 재정렬-블록-복제-피드백 매개변수는 프로파일 피드백이 있을 때만 사용됩니다.
사용할 수 있습니다. 보다 높은 값으로 설정될 수 있습니다. 재정렬-블록-복제 이후
핫스팟에 대한 정보가 더 정확합니다.
최대-sched-ready-insns
스케줄러를 발행할 준비가 된 최대 명령어 수는 다음과 같아야 합니다.
첫 번째 스케줄링 패스 동안 주어진 시간에 고려하십시오. 값 증가
더 철저한 검색을 의미하므로 아마도 컴파일 시간이 증가할 것입니다.
작은 이익. 기본값은 100입니다.
최대 일정 지역 블록
블록 간 고려 대상 영역의 최대 블록 수
일정. 기본값은 10입니다.
최대 파이프라인 영역 블록
파이프라이닝을 위해 고려되는 지역의 최대 블록 수
선택적 스케줄러 기본값은 15입니다.
최대-sched-지역-insns
Interblock 고려 대상 지역 내 최대 숙소 수
일정. 기본값은 100입니다.
최대 파이프라인-지역-insns
파이프라이닝을 위해 고려되는 지역의 최대 여관 수
선택적 스케줄러 기본값은 200입니다.
최소 사양 문제
인터블록의 소스 블록에 도달할 최소 확률(백분율)
추측성 일정. 기본값은 40입니다.
최대-sched-확장-지역-iters
영역을 확장하기 위해 CFG를 통한 최대 반복 횟수입니다. 값 0(
기본) 지역 확장을 비활성화합니다.
최대-sched-insn-충돌-지연
투기적 움직임에 대해 고려되는 여관의 최대 충돌 지연입니다.
기본값은 3입니다.
일정-사양-문제-컷오프
투기 성공의 최소 확률(백분율), 따라서 투기적
숙소가 예정되어 있습니다. 기본값은 40입니다.
일정-사양-상태-가장자리-문제-컷오프
스케줄러가 상태를 저장하기 위해 가장자리가 가져야 하는 최소 확률
건너편. 기본값은 10입니다.
sched-mem-true-dep-비용
동일한 메모리를 대상으로 하는 저장소와 로드 사이의 최소 거리(CPU 주기)
위치. 기본값은 1입니다.
selsched-max-lookahead
선택적 스케줄링의 미리보기 창의 최대 크기입니다. 깊이이다
사용 가능한 지침을 검색합니다. 기본값은 50입니다.
selsched-최대-sched-시간
선택 중에 명령이 예약되는 최대 횟수
일정. 이것은 반복 횟수에 대한 제한입니다.
명령이 파이프라인될 수 있습니다. 기본값은 2입니다.
selsched-max-insns-이름 바꾸기
준비 목록에서 고려되는 최상의 명령의 최대 수
선택적 스케줄러에서 이름 바꾸기. 기본값은 2입니다.
SMS-min-sc
스윙 모듈로 스케줄러가 생성하는 스테이지 수의 최소값입니다. NS
기본값은 2입니다.
최대 마지막 값 rtl
표현식에 기록될 수 있는 RTL의 수로 측정된 최대 크기
의사 레지스터에 대한 결합기에서 해당 레지스터의 마지막으로 알려진 값으로. NS
기본값은 10000입니다.
max-combin-insns
RTL 결합기가 결합하려고 하는 최대 명령어 수입니다. 기본값
값은 2에서 -오그 그렇지 않으면 4입니다.
정수 공유 제한
작은 정수 상수는 공유 데이터 구조를 사용하여 컴파일러의
메모리 사용 및 속도 증가. 이것은 공유의 최대값을 설정합니다.
정수 상수. 기본값은 256입니다.
ssp 버퍼 크기
스택 스매싱 보호를 받는 버퍼(예: 어레이)의 최소 크기
언제 -fstack 보호 사용.
Ubuntu 10.10 이전의 이 기본값은 "8"이었습니다. 현재 "4"입니다.
스택 보호기에 의해 보호되는 기능의 수.
스택 공유를 위한 최소 크기
스택 슬롯 공유에 참여하지 않는 경우 최소 변수 크기
최적화. 기본값은 32입니다.
최대-점프-스레드-중복-stmts
다음과 같은 경우 복제해야 하는 블록에 허용되는 최대 명령문 수
스레딩 점프.
최대 필드 대 필드 감지
필드 감지 방식으로 처리되는 구조의 최대 필드 수
포인터 분석. 기본값은 XNUMX입니다. -O0 and -O1, 100 for - 오스, -O2및
-O3.
프리페치 대기 시간
프리페치 전에 실행되는 평균 명령어 수 추정
끝. 미리 가져오는 거리는 이 상수에 비례합니다.
이 수를 늘리면 미리 가져오는 스트림이 줄어들 수도 있습니다(참조
동시 프리페치).
동시 프리페치
동시에 실행할 수 있는 최대 프리페치 수입니다.
l1-캐시-라인-크기
L1 캐시의 캐시 라인 크기(바이트)입니다.
l1 캐시 크기
L1 캐시의 크기(KB)입니다.
l2 캐시 크기
L2 캐시의 크기(KB)입니다.
최소 insn 대 프리페치 비율
명령어 수와 프리페치 수 사이의 최소 비율
루프에서 프리페치를 활성화합니다.
prefetch-min-insn-to-mem 비율
명령어 수와 메모리 수 사이의 최소 비율
루프에서 프리페치를 활성화하기 위한 참조.
표준 유형 사용
컴파일러가 "표준" 유형 시스템을 사용해야 하는지 여부입니다. 기본적으로 이
항상 1이어야 하며, 비교를 위해 보다 효율적인 내부 메커니즘을 사용합니다.
C++ 및 Objective-C++의 유형. 그러나 표준 유형 시스템의 버그가
컴파일 실패를 일으키는 경우 이 값을 0으로 설정하여 표준 유형을 비활성화합니다.
스위치 변환 최대 분기 비율
스위치 초기화 변환은 다음보다 큰 어레이 생성을 거부합니다.
스위치 변환 최대 분기 비율 스위치의 분기 수를 곱합니다.
최대 부분 길이
트리 부분 동안 계산된 부분적 익스트림 집합의 최대 길이
중복 제거 최적화(-fttree-pre)에서 최적화할 때 -O3 이상.
일부 소스 코드의 경우 향상된 부분 중복 제거
최적화가 실행되어 호스트에서 사용 가능한 모든 메모리를 소모할 수 있습니다.
기계. 이 매개변수는 계산되는 세트의 길이에 대한 제한을 설정합니다.
가출 행동을 방지합니다. 이 매개변수의 값을 0으로 설정
무제한 설정 길이를 허용합니다.
sccvn-max-scc-크기
SCCVN 처리 중 SCC(강력하게 연결된 구성 요소)의 최대 크기입니다. 만약에
이 제한에 도달하면 전체 기능에 대한 SCCVN 처리가 완료되지 않고
그에 따른 최적화가 비활성화됩니다. 기본 최대 SCC 크기는
10000.
sccvn-max-alias-액세스당 쿼리
중복을 찾을 때 수행하는 최대 alias-oracle 쿼리 수
로드 및 스토어용. 이 제한에 도달하면 검색이 중단되고 로드 또는
저장소는 중복으로 간주되지 않습니다. 쿼리 수는 알고리즘적으로
로드에서 함수 항목까지의 모든 경로에 있는 저장소 수로 제한됩니다.
기본 최대 쿼리 수는 1000입니다.
ira-최대-루프-번호
IRA는 기본적으로 지역 레지스터 할당을 사용합니다. 함수에 더 많은 내용이 포함된 경우
루프는 이 매개변수에 의해 주어진 수보다 많아야 주어진 수의
가장 자주 실행되는 루프는 지역 레지스터 할당을 위한 영역을 형성합니다.
매개변수의 기본값은 100입니다.
ira-max-충돌-테이블-크기
IRA는 복잡한 알고리즘을 사용하여 충돌 테이블을 압축하지만,
테이블은 여전히 거대한 기능을 위해 과도한 양의 메모리를 필요로 할 수 있습니다. 만약
함수에 대한 충돌 테이블은 다음에서 지정한 크기(MB)보다 클 수 있습니다.
매개변수 대신 레지스터 할당자는 더 빠르고 간단하며 더 낮은 값을 사용합니다.
의사 레지스터 충돌 테이블을 구축할 필요가 없는 품질 알고리즘.
매개변수의 기본값은 2000입니다.
ira-루프-예약-regs
IRA는 결정을 위한 루프에서 보다 정확한 레지스터 압력을 평가하는 데 사용할 수 있습니다.
루프 불변량을 이동하려면(참조 -O3). 예약된 사용 가능한 레지스터 수
이 매개변수는 몇 가지 다른 목적을 제공합니다. 기본 값
매개변수는 2이며, 이는 일반적으로 필요한 최소 레지스터 수입니다.
지침. 이 값은 수많은 실험에서 발견된 가장 좋은 값입니다.
lra-상속-ebb-확률-컷오프
LRA는 후속 insns의 레지스터에 다시 로드된 값을 재사용하려고 합니다. 이것
최적화를 상속이라고 합니다. EBB는 이를 수행하는 영역으로 사용됩니다.
최적화. 매개변수는 최소 폴스루 에지 확률을 정의합니다.
LRA의 상속 EBB에 BB를 추가하는 데 사용되는 백분율입니다. 기본 값
매개변수는 40입니다. 값은 x2000-86에서 SPEC64을 여러 번 실행한 결과 선택되었습니다.
루프 불변 최대-bbs-in-loop
루프 불변 동작은 컴파일 시간과 컴파일 시간 모두에서 매우 비쌀 수 있습니다.
매우 큰 루프와 함께 필요한 컴파일 시간 메모리의 양. 더 많은 루프
이 매개변수보다 기본 블록에는 루프 불변 모션 최적화가 없습니다.
그들에 수행. 매개변수의 기본값은 1000입니다. -O1 및 10000
for -O2 이상.
루프-최대-datarefs-for-datadeps
데이터 종속성을 구축하는 것은 매우 큰 루프의 경우 비용이 많이 듭니다. 이 매개변수
데이터에 대해 고려되는 루프의 데이터 참조 수를 제한합니다.
의존성 분석. 이러한 큰 루프는 다음을 사용하는 최적화에 의해 처리되지 않습니다.
루프 데이터 종속성. 기본값은 1000입니다.
최대 변수 트랙 크기
변수 추적 데이터 흐름 중에 사용할 해시 테이블 슬롯의 최대 수를 설정합니다.
어떤 기능의 분석. 에서 변수 추적으로 이 제한을 초과하는 경우
할당이 활성화되면 해당 기능에 대한 분석이 할당 없이 재시도됩니다.
함수에서 모든 디버그 인스턴스를 제거합니다. 없이도 한도를 초과한 경우
debug insns, var 추적 분석은 기능에 대해 완전히 비활성화됩니다.
매개변수를 XNUMX으로 설정하면 무제한이 됩니다.
max-vartrack-expr-깊이
변수 이름을 매핑하거나
값 표현식에 대한 디버그 임시. 이것은 더 많은 것을 위해 컴파일 시간을 교환합니다
완전한 디버그 정보. 너무 낮게 설정하면 값 표현식이
사용 가능하고 디버그 정보로 표시될 수 있으며 결국 사용되지 않을 수 있습니다.
이 값을 높게 설정하면 컴파일러가 더 복잡한 디버그를 찾을 수 있습니다.
표현식이지만 컴파일 시간과 메모리 사용량이 늘어날 수 있습니다. 기본값은 12입니다.
최소-nondebug-insn-uid
nondebug insns에 대해 이 매개변수에서 시작하는 uid를 사용하십시오. 이하의 범위
매개변수는
-fvar-추적 할당, 그러나 디버그 insns는 위의 (중첩되지 않은) uid를 얻을 수 있습니다.
예약된 범위가 소진된 경우입니다.
ipa-sra-ptr-성장 인자
IPA-SRA는 집계에 대한 포인터를 하나 이상의 새 매개변수로만 대체합니다.
누적 크기가 다음보다 작거나 같을 때 ipa-sra-ptr-성장 인자 시간을
원래 포인터 매개변수의 크기입니다.
sra-max-scalarization-size-Ospeed
sra-max-scalarization-size-Osize
두 가지 SRA(Scalar Reduction of Aggregates) 패스(SRA 및 IPA-SRA)는 다음을 대체하는 것을 목표로 합니다.
독립 스칼라 변수를 사용하는 집계의 스칼라 부분. 이것들
매개변수는 저장 단위에서 집계의 최대 크기를 제어합니다.
속도를 위해 컴파일할 때 교체 고려(sra-max-scalarization-size-
오스피드) 또는 크기(sra-max-scalarization-size-Osize) 각각.
tm-최대 집계 크기
트랜잭션에서 스레드 로컬 변수의 복사본을 만들 때 이 매개변수는
변수가 로깅과 함께 저장되는 이후의 크기를 바이트 단위로 지정합니다.
코드 시퀀스 쌍을 저장/복원하는 것과는 대조적으로 기능합니다. 이 옵션만
사용할 때 적용 -fgnu-tm.
흑연-최대-nb-scop-params
흑연 루프 변환에서 기하급수적인 영향을 피하기 위해
SCoP(Static Control Part)의 매개변수는 제한적입니다. 기본값은 10입니다.
매개변수. 컴파일 시 값을 알 수 없고 정의된 변수
SCoP 외부는 SCoP의 매개변수입니다.
기능당 graphite-max-bbs
SCoP 탐지 시 기하급수적인 영향을 피하기 위해 함수의 크기
Graphite에 의해 분석됩니다. 기본값은 100 기본 블록입니다.
루프 블록 타일 크기
루프 차단 또는 스트립 마이닝 변환, 사용 가능 -floop-블록 or
-floop-스트립-광산, 주어진 수만큼 루프 네스트의 각 루프를 제거합니다.
반복. 스트립 길이는 다음을 사용하여 변경할 수 있습니다. 루프 블록 타일 크기
매개변수. 기본값은 51회 반복입니다.
루프 풀기 걸림 크기
에 대한 언롤 팩터를 지정합니다. -플루프 풀기 및 걸림 옵션. 기본값
4입니다.
루프 풀기 걸림 깊이
펼칠 치수를 지정합니다(가장 안쪽 루프부터 계산).
-플루프 풀기 및 걸림. 기본값은 2입니다.
ipa-cp-값-목록-크기
IPA-CP는 함수에 전달된 가능한 모든 값과 유형을 추적하려고 시도합니다.
매개변수를 전파하고 가상화를 수행합니다. ipa-cp-값-
목록 크기 하나의 형식당 저장하는 값 및 유형의 최대 수입니다.
함수의 매개변수.
ipa-cp-평가-임계값
IPA-CP는 복제 수익성 휴리스틱의 자체 점수를 계산하고 수행합니다.
를 초과하는 점수를 가진 복제 기회 ipa-cp-평가-임계값.
ipa-cp-재귀 페널티
재귀 함수가 평가될 때 받게 될 페널티 비율
복제를 위해.
ipa-cp-단일 호출-페널티
다른 함수에 대한 단일 호출을 포함하는 백분율 페널티 함수는
복제에 대해 평가될 때 수신합니다.
ipa-max-agg-항목
IPA-CP는 또한 전달된 여러 스칼라 값을 전파할 수 있습니다.
골재. ipa-max-agg-항목 하나당 이러한 값의 최대 수를 제어합니다.
매개 변수입니다.
ipa-cp-loop-힌트-보너스
IPA-CP가 복제 후보가
알려진 루프의 반복, 그것은 보너스를 추가합니다 ipa-cp-loop-힌트-보너스 부터
후보자의 수익성 점수.
ipa-cp-array-index-힌트-보너스
IPA-CP가 복제 후보가 어레이의 인덱스를 만들 것이라고 결정할 때
알려진 액세스, 그것은 보너스를 추가 ipa-cp-array-index-힌트-보너스 부터
후보자의 수익성 점수.
ipa-max-aa-단계
기능 본체를 분석하는 동안 IPA-CP는 별칭 분석을 사용하여 다음을 수행합니다.
함수 매개변수가 가리키는 값을 추적합니다. 너무 많은 시간을 보내지 않기 위해
거대한 기능을 분석하면 포기하고 모든 메모리가
검토 ipa-max-aa-단계 메모리를 수정하는 명령문.
lto 파티션
WHOPR 컴파일 중에 생성되는 원하는 파티션 수를 지정합니다. NS
파티션 수는 컴파일에 사용되는 CPU 수를 초과해야 합니다. NS
기본값은 32입니다.
lto-최소 파티션
WHOPR에 대한 최소 파티션 크기(예상 지침). 이것은 방지
아주 작은 프로그램을 너무 많은 파티션으로 분할하는 비용.
cxx-max-네임스페이스-for-diagnostic-help
C++ 이름 조회 시 제안을 참조할 최대 네임스페이스 수
식별자에 대해 실패합니다. 기본값은 1000입니다.
싱크 주파수 임계값
대상 블록의 최대 상대 실행 빈도(백분율)
명령문 싱킹을 허용하기 위해 명령문의 원래 블록에 상대적
성명. 숫자가 클수록 더 공격적인 문 싱크가 발생합니다. NS
기본값은 75입니다.
메모리 피연산자는 훨씬 더 수익성이 높기 때문에 가라앉습니다.
최대 매장 수
매몰될 수 있는 조건부 저장소 쌍의 최대 수입니다. 경우 0으로 설정
벡터화(-ftree 벡터화) 또는 if 변환(-ftree-loop-if-변환)
비활성화됩니다. 기본값은 2입니다.
허용 저장 데이터 레이스
최적화 프로그램이 상점에 새로운 데이터 경쟁을 도입하도록 허용합니다. 허용하려면 1로 설정하고,
그렇지 않으면 0으로 설정합니다. 이 옵션은 최적화 수준에서 기본적으로 활성화됩니다. -오파스트.
케이스 값 임계값
점프 테이블을 사용하는 것이 가장 좋은 서로 다른 값의 최소 수
조건부 가지의 나무 대신. 값이 0이면 기본값을 사용합니다.
기계. 기본값은 0입니다.
트리 재연결 너비
재연관 트리에서 병렬로 실행되는 최대 명령어 수를 설정합니다.
이 매개변수는 다음이 아닌 경우 기본적으로 사용되는 대상 종속 휴리스틱을 재정의합니다.
제로 값.
일정 압력 알고리즘
사용 가능한 두 가지 구현 중에서 선택하십시오. -fsched-압력. 알고리즘 1
원래 구현이며 명령이
재주문 중입니다. 알고리즘 2는
알고리즘 1에서 취한 비교적 보수적인 접근 방식과 다소 공격적인 접근 방식
기본 스케줄러가 사용하는 접근 방식. 갖는 것에 더 크게 의존한다.
일반 레지스터 파일 및 정확한 레지스터 압력 등급. 보다 하이파-sched.c
자세한 내용은 GCC 소스에서 확인하세요.
기본 선택은 대상에 따라 다릅니다.
최대-slsr-cand-스캔
구직 시 고려되는 기존 후보자의 최대 수를 설정합니다.
새로운 직선 강도 감소 후보에 대한 기초.
아산글로벌스
전역 개체에 대한 버퍼 오버플로 감지를 활성화합니다. 이러한 보호는
사용하는 경우 기본적으로 활성화됨 -fsanitize=주소 옵션. 전역 비활성화
개체 보호 사용 --매개변수 아산-글로벌=0.
아산 스택
스택 개체에 대한 버퍼 오버플로 감지를 활성화합니다. 이러한 보호는
사용할 때 기본적으로 활성화됨-fsanitize=주소. 스택 보호 사용을 비활성화하려면
--매개변수 아산 스택=0 옵션을 선택합니다.
아산-악기-읽기
메모리 읽기에 대한 버퍼 오버플로 감지를 활성화합니다. 이러한 보호는
사용할 때 기본적으로 활성화됨 -fsanitize=주소. 메모리 읽기를 비활성화하려면
보호 사용 --매개변수 아산-악기-읽기=0.
아산-악기-쓰기
메모리 쓰기에 대한 버퍼 오버플로 감지를 활성화합니다. 이러한 보호는
사용할 때 기본적으로 활성화됨 -fsanitize=주소. 메모리 쓰기를 비활성화하려면
보호 사용 --매개변수 아산-악기-쓰기=0 옵션을 선택합니다.
아산-메민트린
내장 기능에 대한 감지를 활성화합니다. 이러한 종류의 보호는 다음을 통해 활성화됩니다.
사용할 때 기본값 -fsanitize=주소. 내장 기능 보호를 비활성화하려면
사용 --매개변수 아산-메민트린=0.
asan-이용 후-반환
반품 후 사용 감지를 활성화합니다. 이러한 종류의 보호는 다음을 통해 활성화됩니다.
사용할 때 기본값 -fsanitize=주소 옵션. 반품 후 사용을 비활성화하려면
탐지 사용 --매개변수 아산-반환 후 사용=0.
asan-계측-통화 임계값
계측 중인 함수의 메모리 액세스 수가 다음보다 크거나 같은 경우
이 번호는 인라인 검사 대신 콜백을 사용합니다. 예: 인라인 코드 비활성화
사용 --매개변수 asan-계측-with-call-임계값=0.
chkp-max-ctor-크기
포인터 경계 검사기에 의해 생성된 정적 생성자는 매우 커질 수 있으며
최적화 수준에서 컴파일 시간을 크게 늘립니다. -O1 그리고 더 높은. 이것
매개변수는 생성된 단일 생성자의 최대 명령문 수입니다.
기본값은 5000입니다.
최대-fsm-스레드-경로-insns
유한 상태에서 블록을 복제할 때 복사할 최대 명령어 수
오토마톤 점프 스레드 경로. 기본값은 100입니다.
최대 fsm 스레드 길이
유한 상태 오토마톤 점프 스레드 경로의 최대 기본 블록 수입니다. NS
기본값은 10입니다.
최대 fsm 스레드 경로
유한 상태 자동 장치에 대해 생성할 새 점프 스레드 경로의 최대 수입니다.
기본값은 50입니다.
옵션 제어 전에, 전 처리기
이 옵션은 실제 실행 전에 각 C 소스 파일에서 실행되는 C 전처리기를 제어합니다.
편집.
당신이 사용하는 경우 -E 옵션을 선택하면 전처리 외에는 아무 것도 수행되지 않습니다. 이러한 옵션 중 일부
함께 만 의미 -E 전처리기 출력이
실제 컴파일에는 적합하지 않습니다.
-워,option
당신이 사용할 수 -워,option 컴파일러 드라이버를 우회하고 통과 option 직접적으로
전처리기에. 만약에 option 쉼표가 포함되어 있으며 다음 위치에서 여러 옵션으로 나뉩니다.
쉼표. 그러나 많은 옵션이 수정, 번역 또는 해석됩니다.
전처리기로 전달되기 전에 컴파일러 드라이버, -Wp 강제로 우회
이 단계. 전처리기의 직접 인터페이스는 문서화되지 않았으며
변경하므로 가능하면 사용을 피해야 합니다. -Wp 그리고 운전자가 핸들을 잡도록 하십시오.
대신 옵션.
-엑스프리프로세서 option
패스 option 전처리기에 대한 옵션으로. 이것을 사용하여 시스템에 공급할 수 있습니다.
GCC가 인식하지 못하는 특정 전처리기 옵션.
인수를 취하는 옵션을 전달하려면 다음을 사용해야 합니다. -엑스프리프로세서
두 번, 옵션에 대해 한 번, 인수에 대해 한 번.
-통합되지 않은-cpp
컴파일 전에 별도의 패스로 전처리를 수행합니다. 기본적으로 GCC는 다음을 수행합니다.
입력 토큰화 및 구문 분석의 통합된 부분으로 사전 처리. 이 옵션의 경우
적절한 언어 프런트 엔드(cc1, 씨원플러스및 cc1obj C, C++의 경우,
및 Objective-C)는 대신 전처리를 위해 한 번만 두 번 호출됩니다.
사전 처리된 입력의 실제 컴파일을 위해 한 번. 이 옵션은 유용할 수 있습니다
과 함께 -B or -싸개 대체 전처리기를 지정하는 옵션 또는
정상적인 전처리와 전처리 사이에 프로그램 소스의 추가 처리를 수행합니다.
편집.
-D name
사전 정의 name 매크로로 정의 1.
-D name=정의
내용 정의 토큰화 및 처리됩니다.
번역 단계 XNUMX #밝히다 지령. 특히, 정의는
포함된 개행 문자로 잘립니다.
쉘 또는 쉘과 유사한 프로그램에서 전처리기를 호출하는 경우 다음이 필요할 수 있습니다.
쉘의 인용 구문을 사용하여 공백과 같은 문자를 보호합니다.
쉘 구문의 의미.
명령줄에서 함수와 같은 매크로를 정의하려면 해당 인수를 작성하십시오.
등호(있는 경우) 앞에 괄호가 있는 목록. 괄호는
대부분의 쉘에 의미가 있으므로 옵션을 인용해야 합니다. 와 함께 sh and CSH,
-NS'name(인수...)=정의' 작동합니다.
-D and -U 옵션은 명령줄에 제공된 순서대로 처리됩니다. 모두
-매크로 파일 and -포함 파일 옵션은 결국 처리됩니다 -D and -U 옵션을 제공합니다.
-U name
이전 정의 취소 name, 내장 또는 제공 -D 옵션을 선택합니다.
-언데프
시스템 특정 또는 GCC 특정 매크로를 미리 정의하지 마십시오. 미리 정의된 표준
매크로는 정의된 상태로 유지됩니다.
-I DIR
디렉토리 추가 DIR 헤더 파일을 검색할 디렉토리 목록으로 이동합니다.
이름이 지정된 디렉토리 -I 표준 시스템이 디렉토리를 포함하기 전에 검색됩니다.
디렉토리의 경우 DIR 표준 시스템 포함 디렉토리인 경우 옵션이 무시됩니다.
시스템 디렉토리에 대한 기본 검색 순서와 특수 처리가
의 시스템 헤더는 패배하지 않습니다. 만약에 DIR "="로 시작하면 "="가 됩니다.
sysroot 접두사로 대체됩니다. 보다 --sysroot and -isysroot.
-o 파일
에 출력 쓰기 파일. 지정하는 것과 같습니다. 파일 두 번째 옵션으로
인수 CPP. GCC 옵션이 아닌 두 번째 인수에 대해 다른 해석이 있는 경우
그래서 당신은 사용해야합니다 -o 출력 파일을 지정합니다.
-벽
일반 코드에 필요한 모든 선택적 경고를 켭니다. 현재 이
is -댓글, -저서, -W멀티문자 및 정수 승격에 대한 경고로 인해
"#if" 표현의 기호 변경. 많은 전처리기의 경고가
기본적으로 켜져 있으며 제어할 수 있는 옵션이 없습니다.
-댓글
-W댓글
주석 시작 시퀀스 때마다 경고 /* 에 나타납니다 /* 댓글 또는 언제든지
백슬래시-개행 문자가 나타납니다. // 논평. (두 형태 모두 동일한 효과를 가집니다.)
-저서
주석에 있는 대부분의 삼중자는 프로그램의 의미에 영향을 줄 수 없습니다. 그러나
이스케이프된 개행 문자(??/ 줄 끝에서) 할 수 있습니다.
주석이 시작되거나 끝나는 위치를 변경합니다. 따라서,
이스케이프된 줄 바꿈은 주석 내부에 경고를 생성합니다.
이 옵션은 -벽. 면 -벽 이 옵션은 여전히 활성화되어 있습니다.
trigraphs가 활성화되지 않는 한. 경고 없이 trigraph 변환을 얻으려면
다른 -벽 경고, 사용 -삼각형 -벽 -Wno-trigraphs.
-전통적인
기존 및 ISO C에서 다르게 동작하는 특정 구성에 대해 경고합니다. 또한
기존의 C에 해당하는 항목이 없고 문제가 있는 ISO C 구성에 대해 경고합니다.
피해야 할 구조.
-분데프
매크로가 아닌 식별자가 #만약 지시문
밖의 한정된. 이러한 식별자는 XNUMX으로 대체됩니다.
-사용하지 않은 매크로
사용하지 않는 기본 파일에 정의된 매크로에 대해 경고합니다. 매크로는 익숙한 그렇다면
적어도 한 번은 확장되거나 존재 여부를 테스트했습니다. 전처리기는 다음과 같은 경우에도 경고합니다.
매크로가 재정의되거나 정의되지 않은 시점에 사용되지 않았습니다.
기본 제공 매크로, 명령줄에 정의된 매크로 및 에 정의된 매크로는 다음을 포함합니다.
파일에 대해 경고하지 않습니다.
참고 : 매크로가 실제로 사용되지만 건너뛴 조건부 블록에서만 사용되는 경우
CPP는 이를 사용하지 않은 것으로 보고합니다. 이러한 경우 경고를 피하기 위해 다음을 개선할 수 있습니다.
예를 들어 매크로 정의의 범위를 건너뛴 첫 번째 항목으로 이동합니다.
블록. 또는 다음과 같이 더미 사용을 제공할 수 있습니다.
#the_macro_causing_the_warning을 정의한 경우
#endif
-웬디프 라벨
언제든지 경고 #그밖에 또는 #endif 텍스트가 뒤따릅니다. 이것은 일반적으로 다음에서 발생합니다.
형식의 코드
#만약 FOO라면
...
#else 푸
...
#endif foo
두 번째와 세 번째 "FOO"는 주석에 있어야 하지만 이전 프로그램에는 없는 경우가 많습니다.
이 경고는 기본적으로 켜져 있습니다.
-워러
모든 경고를 하드 오류로 만듭니다. 경고를 트리거하는 소스 코드는 다음과 같습니다.
거부되었습니다.
-Wsystem 헤더
시스템 헤더의 코드에 대한 경고를 발행합니다. 이것들은 일반적으로 찾는 데 도움이 되지 않습니다.
따라서 자신의 코드에 있는 버그를 억제합니다. 시스템에 대한 책임이 있는 경우
도서관, 당신은 그들을보고 싶을 수 있습니다.
-w GNU CPP가 기본적으로 발행하는 경고를 포함하여 모든 경고를 표시하지 않습니다.
-페단 틱
C 표준에 나열된 모든 필수 진단을 발행하십시오. 그들 중 일부는 남아 있습니다
무해한 코드에서 자주 트리거되기 때문에 기본적으로 out.
- 현학적 오류
모든 필수 진단을 실행하고 모든 필수 진단을 오류로 만듭니다.
여기에는 GCC가 다음 없이 발행하는 필수 진단이 포함됩니다. -페단 틱 그러나 다음과 같이 취급합니다.
경고.
-M 전처리 결과를 출력하는 대신에 적합한 규칙을 출력 확인
기본 소스 파일의 종속성을 설명합니다. 전처리기는 하나를 출력합니다.
확인 해당 소스 파일에 대한 개체 파일 이름, 콜론 및 이름을 포함하는 규칙
다음에서 오는 파일을 포함하여 포함된 모든 파일의 -포함 or -매크로 명령-
라인 옵션.
명시적으로 지정하지 않는 한( -산 or -MQ), 개체 파일 이름은
접미사가 개체 파일 접미사로 대체되고 임의의 접미사가 있는 소스 파일의 이름
선행 디렉토리 부분이 제거되었습니다. 포함된 파일이 많은 경우 규칙은 다음과 같습니다.
사용하여 여러 줄로 분할 \- 개행. 규칙에는 명령이 없습니다.
이 옵션은 다음과 같은 전처리기의 디버그 출력을 억제하지 않습니다. -dM. 피하려면
이러한 디버그 출력을 종속성 규칙과 혼합하여 명시적으로 지정해야 합니다.
종속성 출력 파일 -MF, 또는 다음과 같은 환경 변수를 사용하십시오.
DEPENDENCIES_OUTPUT. 디버그 출력은 다음과 같이 일반 출력 스트림으로 계속 전송됩니다.
정상입니다.
통과 -M 운전자에게 의미 -E, 그리고 암시적으로 경고를 억제합니다. -w.
-MM 처럼 -M 그러나 시스템 헤더 디렉토리에 있는 헤더 파일은 언급하지 마십시오.
이러한 헤더에서 직접 또는 간접적으로 포함된 헤더 파일도 없습니다.
이것은 꺾쇠 괄호 또는 큰 따옴표를 선택하는 것을 의미합니다. #포함
지시문 자체는 해당 헤더가 다음에 나타날지 여부를 결정하지 않습니다. -MM
의존성 출력. 이것은 GCC 버전 3.0 및
일찍이.
-MF 파일
함께 사용할 때 -M or -MM, 종속성을 쓸 파일을 지정합니다. 그렇지 않은 경우 -MF
스위치는 전처리기가 전송했을 동일한 위치로 규칙을 보냅니다.
전처리된 출력.
드라이버 옵션과 함께 사용하는 경우 -MD or -MMD, -MF 기본 종속성을 재정의합니다.
결과물 파일.
-mg 다음과 같은 옵션과 함께 -M 의존성 생성 요청, -mg 가정하다
누락된 헤더 파일은 생성된 파일이며 이를 제외하고 종속성 목록에 추가합니다.
오류를 발생시킵니다. 종속성 파일 이름은 "#include"에서 직접 가져옵니다.
경로를 추가하지 않고 지시문. -mg 또한 전처리된 출력을 억제합니다.
누락된 헤더 파일은 이것을 쓸모없게 만듭니다.
이 기능은 makefile의 자동 업데이트에 사용됩니다.
- MP 이 옵션은 CPP가 다음 이외의 각 종속성에 대해 가짜 대상을 추가하도록 지시합니다.
메인 파일을 생성하여 각각이 아무것도 의존하지 않게 합니다. 이 더미 규칙은 오류를 해결합니다.
확인 업데이트하지 않고 헤더 파일을 제거하면 제공 Makefile 일치합니다.
다음은 일반적인 출력입니다.
test.o: test.c test.h
test.h :
-산 목표
종속성 생성에서 내보낸 규칙의 대상을 변경합니다. 기본적으로 CPP는
기본 입력 파일의 이름, 모든 디렉토리 구성 요소 및 파일 접미사 삭제
등 .c, 플랫폼의 일반적인 개체 접미사를 추가합니다. 결과는 목표입니다.
An -산 옵션은 대상을 정확히 지정한 문자열로 설정합니다. 네가 원한다면
여러 대상을 단일 인수로 지정할 수 있습니다. -산, 또는 여러
-산 옵션을 제공합니다.
예를 들어, -산 '$(objpfx)foo.o' 줄 수도
$(objpfx)foo.o: foo.c
-MQ 목표
과 동일 -산, 그러나 Make에 특별한 모든 문자를 인용합니다.
-MQ '$(objpfx)foo.o' 제공
$$(objpfx)foo.o: foo.c
기본 대상은 다음과 같이 제공된 것처럼 자동으로 인용됩니다. -MQ.
-MD -MD 에 해당하는 -M -MF 파일제외하고 -E 암시되지 않습니다. 운전사
결정하다 파일 여부에 따라 -o 옵션이 주어집니다. 그렇다면 드라이버는
인수이지만 접미사 .d, 그렇지 않으면 입력 파일의 이름을 사용합니다.
모든 디렉토리 구성 요소와 접미사를 제거하고 .d 접미사.
If -MD 와 함께 사용됩니다 -E, 어떤 -o 스위치는 다음을 지정하는 것으로 이해됩니다.
종속성 출력 파일이지만 없이 사용되는 경우 -E, 각각 -o 지정하는 것으로 이해된다
대상 개체 파일.
이후 -E 암시되지 않으며, -MD 종속성 출력 파일을 생성하는 데 사용할 수 있습니다.
컴파일 과정의 부작용
-MMD
처럼 -MD 시스템 헤더 파일이 아닌 사용자 헤더 파일만 언급하는 것을 제외하고.
-fpch-deps
미리 컴파일된 헤더를 사용할 때 이 플래그로 인해 종속성 출력 플래그가
또한 미리 컴파일된 헤더의 종속성에서 파일을 나열합니다. 지정되지 않은 경우에만
미리 컴파일된 헤더가 나열되고 헤더를 만드는 데 사용된 파일이 나열되지 않습니다.
미리 컴파일된 헤더를 사용할 때 해당 파일을 참조하지 않기 때문입니다.
-fpch-전처리
이 옵션을 사용하면 미리 컴파일된 헤더를 다음과 함께 사용할 수 있습니다. -E. 특수문자를 삽입합니다
"#pragma", "#pragma GCC pch_preprocess "파일 이름"" 장소를 표시하기 위해 출력에서
미리 컴파일된 헤더가 발견된 위치 및 파일 이름. 언제 -f전처리 에
사용하면 GCC가 이 "#pragma"를 인식하고 PCH를 로드합니다.
이 옵션은 기본적으로 꺼져 있습니다. 사전 처리된 결과 출력은
GCC에 대한 입력으로 정말 적합합니다. 에 의해 켜져 있습니다. - 임시 저장.
이 "#pragma"를 자신의 코드에 작성해서는 안 되지만 편집하는 것이 안전합니다.
PCH 파일이 다른 위치에서 사용 가능한 경우 filename. 파일 이름은 다음과 같을 수 있습니다.
절대 또는 GCC의 현재 디렉토리에 상대적일 수 있습니다.
-x c
-x C ++
-x 목적 -c
-x cpp 어셈블러
소스 언어(C, C++, Objective-C 또는 어셈블리)를 지정합니다. 이건 할말이 없다
표준 준수 또는 확장 어떤 기본 구문을
예상하다. 이 옵션 중 아무 것도 제공하지 않으면 cpp는 다음에서 언어를 추론합니다.
소스 파일의 확장자: .c, .CC, .m및 .S. 몇 가지 다른 일반적인 확장
C++ 및 어셈블리도 인식됩니다. cpp가 확장자를 인식하지 못하면
파일을 C로 취급합니다. 이것은 가장 일반적인 모드입니다.
참고 : 이전 버전의 cpp가 허용됨 -랑 둘 다 선택한 옵션
언어 및 표준 준수 수준. 이 옵션은 제거되었습니다.
와 충돌한다 -l 옵션을 선택합니다.
-표준=품질
-안시
코드가 준수해야 하는 표준을 지정합니다. 현재 CPP는 C에 대해 알고 있습니다.
및 C++ 표준; 다른 사람들은 미래에 추가될 수 있습니다.
품질 다음 중 하나일 수 있습니다.
"c90"
"c89"
"iso9899:1990"
1990년부터 ISO C 표준입니다. c90 이 버전의 관례적인 약어입니다.
표준.
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 -안시 옵션은 다음과 같습니다. -표준=c90.
"iso9899:199409"
1990년에 개정된 1994년 C 표준.
"iso9899:1999"
"c99"
"iso9899:199x"
"c9x"
1999년 XNUMX월에 출판된 개정된 ISO C 표준.
C9X로 알려졌습니다.
"iso9899:2011"
"c11"
"c1x"
2011년 XNUMX월에 출판된 개정된 ISO C 표준.
C1X로 알려졌습니다.
"그누90"
"그누89"
1990 C 표준과 GNU 확장. 이것이 기본값입니다.
"그누99"
"gnu9x"
1999 C 표준과 GNU 확장.
"그누11"
"gnu1x"
2011 C 표준과 GNU 확장.
"C++98"
1998 ISO C++ 표준 및 수정 사항.
"그누++98"
같은 -std = c ++ 98 플러스 GNU 확장. 이것은 C++ 코드의 기본값입니다.
-나는- 포함 경로를 분할합니다. 다음으로 지정된 모든 디렉토리 -I 전에 옵션 -나는- are
"#include "로 요청된 헤더만 검색합니다.파일""; 그들은 검색되지 않습니다
"#포함하다파일>". 추가 디렉토리가 지정된 경우 -I 이후의 옵션
-나는-, 해당 디렉토리는 모두 검색됩니다. #포함 가이드 라인.
또한, -나는- 현재 파일 디렉토리의 디렉토리를 다음과 같이 사용하는 것을 금지합니다.
"#include "에 대한 첫 번째 검색 디렉토리파일"". 이 옵션은 더 이상 사용되지 않습니다.
-Nostdinc
헤더 파일에 대한 표준 시스템 디렉토리를 검색하지 마십시오. 디렉토리만
당신은 로 지정했습니다 -I 옵션(및 현재 파일의 디렉토리가 있는 경우
해당)이 검색됩니다.
-nostdinc++
C++ 관련 표준 디렉토리에서 헤더 파일을 검색하지 마십시오.
다른 표준 디렉토리를 검색하십시오. (이 옵션은 C++를 빌드할 때 사용됩니다.
도서관.)
-포함 파일
방법 파일 "#include "file""이 기본 소스의 첫 번째 줄에 나타난 것처럼
파일. 그러나 검색한 첫 번째 디렉토리는 파일 전처리기의 작동입니다
예배 규칙서 를 받아야 하는 미국 여행자 of 기본 소스 파일이 포함된 디렉토리. 찾을 수 없는 경우
거기에서 "#include "..."" 검색 체인의 나머지 부분에서 다음과 같이 검색됩니다.
정상입니다.
여러 경우 -포함 옵션이 주어지면 파일은 순서대로 포함됩니다.
명령줄에 나타납니다.
-매크로 파일
정확히 같은 -포함, 스캔에 의해 생성된 모든 출력은 제외 파일 던져진다
떨어져있는. 정의한 매크로는 정의된 상태로 유지됩니다. 이를 통해 모든 매크로를 획득할 수 있습니다.
선언을 처리하지 않고 헤더에서.
에 의해 지정된 모든 파일 -매크로 에 의해 지정된 모든 파일보다 먼저 처리됩니다. -포함.
-idirafter DIR
검색 DIR 헤더 파일의 경우 시간 내에 로 지정된 모든 디렉토리 -I 그리고
표준 시스템 디렉토리가 소진되었습니다. DIR 다음을 포함하는 시스템으로 처리됩니다.
예배 규칙서. 만약에 DIR "="로 시작하면 "="는 sysroot로 대체됩니다.
접두사; 보다 --sysroot and -isysroot.
-ipprefix 접두사
지정 접두사 후속 접두사로 -iwith 접두사 옵션. 접두어의 경우
디렉토리를 나타내므로 최종 /.
-iwith 접두사 DIR
-앞에 접두사가 있는 경우 DIR
추가 DIR 이전에 지정된 접두사에 -ipprefix, 결과를 추가하십시오
디렉토리를 포함 검색 경로로 이동합니다. -앞에 접두사가 있는 경우 같은 장소에 둔다. -I
일 것이다; -iwith 접두사 그것을 어디에 둔다 -idirafter 할 것이다.
-isysroot DIR
이 옵션은 다음과 같습니다. --sysroot 옵션이지만 헤더 파일에만 적용됩니다(예외
헤더 파일과 라이브러리 모두에 적용되는 Darwin 대상). 참조
--sysroot 자세한 내용은 옵션을 참조하십시오.
-imultilib DIR
DIR 대상별 C++ 헤더를 포함하는 디렉토리의 하위 디렉토리로 사용됩니다.
-아이시스템 DIR
검색 DIR 헤더 파일의 경우 다음으로 지정된 모든 디렉토리 뒤에 -I 그러나 전에
표준 시스템 디렉토리. 시스템 디렉토리로 표시하여 동일하게 가져옵니다.
표준 시스템 디렉토리에 적용되는 특별한 취급. 만약에 DIR 시작
"="를 사용하면 "="가 sysroot 접두사로 바뀝니다. 보다 --sysroot and
-isysroot.
- 인용 DIR
검색 DIR "#include "로 요청된 헤더 파일에만 해당파일""; 그들은 아니다
"#포함"을 검색했습니다.파일>", 다음에 의해 지정된 모든 디렉토리 앞에 -I 그리고 전에
표준 시스템 디렉토리. 만약에 DIR "="로 시작하면 "="로 대체됩니다.
sysroot 접두사; 보다 --sysroot and -isysroot.
-f 지시문 전용
전처리할 때 지시문을 처리하되 매크로를 확장하지 마십시오.
옵션의 동작은 -E and -f전처리 옵션을 제공합니다.
와 -E, 전처리는 "#define"과 같은 지시문 처리로 제한됩니다.
"#ifdef" 및 "#오류". 매크로 확장 및
trigraph 변환은 수행되지 않습니다. 또한, -dD 옵션은 암시적으로
사용하도록 설정되었습니다.
와 -f전처리, 명령줄 및 대부분의 내장 매크로의 사전 정의는
장애가있는. 컨텍스트에 따라 달라지는 "__LINE__"과 같은 매크로가 처리됩니다.
보통. 이렇게 하면 이전에 "-E"로 사전 처리된 파일을 컴파일할 수 있습니다.
-f지시어 전용".
둘이 함께 -E and -f전처리, 규칙 -f전처리 우선권을 가지다. 이것
이전에 "-E"로 전처리된 파일의 전체 전처리를 가능하게 합니다.
-f지시어 전용".
-fdollars-in-식별자
수락 $ 식별자에.
-fextended-식별자
식별자에 범용 문자 이름을 허용합니다. 이 옵션은 기본적으로 활성화되어 있습니다.
C99(및 이후의 C 표준 버전) 및 C++용.
-fno-표준 시스템 헤더
전처리할 때 정규화로 시스템 헤더 경로를 줄이지 마십시오.
-f전처리
입력 파일이 이미 전처리되었음을 전처리기에 표시합니다. 이것
매크로 확장, 삼중 그래프 변환, 이스케이프된 개행 연결,
및 대부분의 지시문 처리. 전처리기는 여전히 인식하고 제거합니다.
주석으로 사전 처리된 파일을 전달할 수 있습니다. -C 없이 컴파일러에
문제. 이 모드에서 통합 전처리기는 토크나이저에 불과합니다.
프론트 엔드를 위해.
-f전처리 입력 파일에 확장자 중 하나가 있으면 암시적입니다. .i, .ii or .미.
다음은 GCC가 생성한 전처리된 파일에 사용하는 확장자입니다. - 임시 저장.
-ftabstop=폭
탭 정지 사이의 거리를 설정합니다. 이것은 전처리기가 올바른 열을 보고하는 데 도움이 됩니다.
줄에 탭이 나타나더라도 경고 또는 오류의 숫자. 값이 작을 경우
1보다 크거나 100보다 크면 옵션이 무시됩니다. 기본값은 8입니다.
-fdebug-cpp
이 옵션은 GCC 디버깅에만 유용합니다. 와 함께 사용할 때 -E, 덤프 디버깅
위치 지도에 대한 정보입니다. 출력의 모든 토큰 앞에는 덤프가 옵니다.
그 위치가 속한 지도. 토큰의 위치를 담고 있는 맵의 덤프
다음과 같습니다.
{"P":F ;"F":F ;"엘": ;"씨": ;"NS": ;"미디엄": ;"이자형": ,"위치": }
없이 사용할 때 -E, 이 옵션은 효과가 없습니다.
-ftrack 매크로 확장[=수평]
매크로 확장에서 토큰의 위치를 추적합니다. 이를 통해 컴파일러는
컴파일 오류가 발생할 때 현재 매크로 확장 스택에 대한 진단
매크로 확장. 이 옵션을 사용하면 전처리기와 컴파일러가
더 많은 메모리. NS 수평 매개변수는 토큰의 정밀도 수준을 선택하는 데 사용할 수 있습니다.
위치 추적을 통해 필요한 경우 메모리 소비를 줄입니다. 값 0 of
수평 이 옵션을 비활성화합니다. -ftrack 매크로 확장 에 있었다
명령줄. 값 1 를 위해 저하된 모드에서 토큰 위치를 추적합니다.
최소한의 메모리 오버헤드. 이 모드에서는 확장으로 인한 모든 토큰
함수와 같은 매크로의 인수는 동일한 위치를 갖습니다. 값 2 추적 토큰
위치를 완전히. 이 값은 가장 많은 메모리를 소모합니다. 이 옵션이 주어졌을 때
인수가 없으면 기본 매개변수 값은 다음과 같습니다. 2.
"-ftrack-macro-expansion=2"는 기본적으로 활성화되어 있습니다.
-fexec-문자셋=문자셋
문자열 및 문자 상수에 사용되는 실행 문자 집합을 설정합니다. 기본값
UTF-8입니다. 문자셋 시스템의 "iconv" 라이브러리에서 지원하는 모든 인코딩일 수 있습니다.
일상.
-fwide-exec-charset=문자셋
와이드 문자열 및 문자 상수에 사용되는 와이드 실행 문자 세트를 설정합니다.
기본값은 "wchar_t"의 너비에 해당하는 UTF-32 또는 UTF-16입니다. 같이
과 -fexec-문자셋, 문자셋 시스템의 "iconv"에서 지원하는 모든 인코딩일 수 있습니다.
라이브러리 루틴; 그러나 적합하지 않은 인코딩에는 문제가 있습니다.
정확히 "wchar_t"에 있습니다.
-finput-문자셋=문자셋
입력의 문자 집합에서 번역에 사용되는 입력 문자 집합을 설정합니다.
파일을 GCC에서 사용하는 소스 문자 세트로 변환합니다. 로케일이 지정되지 않은 경우 또는 GCC
로케일에서 이 정보를 가져올 수 없으며 기본값은 UTF-8입니다. 이것은 될 수있다
로케일 또는 이 명령줄 옵션으로 재정의됩니다. 현재 명령-
충돌이 있는 경우 line 옵션이 우선합니다. 문자셋 모든 인코딩이 될 수 있습니다
시스템의 "iconv" 라이브러리 루틴에서 지원합니다.
-fworking-디렉토리
컴파일러가 허용하는 전처리기 출력에서 라인 마커 생성을 활성화
전처리 시점의 현재 작업 디렉토리를 알고 있습니다. 이 옵션이
활성화되면 전처리기가 초기 라인 마커 다음에 두 번째 라인 마커를 내보냅니다.
현재 작업 디렉토리 뒤에 두 개의 슬래시가 있습니다. GCC는 이것을 사용할 것입니다
디렉토리, 사전 처리된 입력에 있는 경우 다음과 같이 내보낸 디렉토리로
일부 디버깅 정보 형식의 현재 작업 디렉토리. 이 옵션은
디버깅 정보가 활성화된 경우 암시적으로 활성화되지만 다음으로 금지할 수 있습니다.
부정형 -fno-작업 디렉터리. 경우 -P 플래그가 명령에 있습니다.
line에서 "#line" 지시문이 전혀 생성되지 않기 때문에 이 옵션은 효과가 없습니다.
-fno-show-열
진단에서 열 번호를 인쇄하지 마십시오. 진단이 필요한 경우 필요할 수 있습니다.
다음과 같이 열 번호를 이해하지 못하는 프로그램에 의해 스캔되고 있습니다.
데자누.
-A 술부=답변
술어로 주장하기 술부 대답 답변. 이 양식은
구형보다 선호 -A 술부(답변), 여전히 지원됩니다.
쉘 특수 문자를 사용하지 않습니다.
-A -술부=답변
술어로 어설션 취소 술부 대답 답변.
-dCHARS
문자 다음 문자 중 하나 이상의 시퀀스이며 다음 문자가 아니어야 합니다.
공백이 앞에 옵니다. 다른 문자는 컴파일러에 의해 적절하게 해석되거나
GCC의 향후 버전을 위해 예약되어 있으므로 자동으로 무시됩니다. 지정하는 경우
행동이 충돌하는 캐릭터, 결과는 정의되지 않습니다.
M 일반 출력 대신 다음 목록을 생성하십시오. #밝히다 모든 지침
미리 정의된 것을 포함하여 전처리기 실행 중에 정의된 매크로
매크로. 이것은 당신의 버전에 사전 정의된 것을 찾는 방법을 제공합니다.
전처리기. 파일이 없다고 가정 푸.h, 명령
터치 foo.h; cpp -dM foo.h
미리 정의 된 모든 매크로가 표시됩니다.
당신이 사용하는 경우 -dM ~없이 -E 선택권, -dM 의 동의어로 해석됩니다.
-fdump-rtl-마하.
D 처럼 M 두 가지 측면을 제외하고: 지원 미리 정의된 매크로를 포함하고
출력 두 전에, #밝히다 지시문 및 전처리 결과. 두 종류
출력의 표준 출력 파일로 이동합니다.
N 처럼 D, 그러나 확장이 아닌 매크로 이름만 내보냅니다.
I 산출 #포함 전처리 결과 외에 지시문.
U 처럼 D 확장되거나 정의가 테스트된 매크로만 제외
전처리기 지시문에서 출력됩니다. 사용할 때까지 출력이 지연되거나
매크로 테스트; 그리고 #언데프 지시문은 테스트된 매크로에 대해서도 출력되지만
당시 정의되지 않은.
-P 전처리기의 출력에서 라인마커 생성을 금지합니다. 이것은 아마도
C 코드가 아닌 무언가에서 전처리기를 실행할 때 유용하며 전송될 것입니다.
linemarkers에 의해 혼동될 수 있는 프로그램에.
-C 댓글을 버리지 마세요. 다음을 제외한 모든 주석은 출력 파일로 전달됩니다.
지시문과 함께 삭제되는 처리된 지시문에 있는 주석의 경우.
사용 시 부작용에 대비해야 합니다. -C; 그것은 전처리기가
댓글을 자체적으로 토큰으로 취급합니다. 예를 들어, 게시판에 표시되는 댓글은
지시 행이 될 것의 시작은 그 행을 다음으로 바꾸는 효과가 있습니다.
라인의 첫 번째 토큰이 더 이상 a가 아니기 때문에 일반 소스 라인 #.
-CC 매크로 확장 중을 포함하여 주석을 삭제하지 마십시오. 이것은 마치 -C제외
매크로에 포함된 주석도 출력 파일로 전달됩니다.
매크로가 확장됩니다.
부작용 뿐만 아니라 -C 옵션, -CC 옵션은 모든 C++ 스타일을 유발합니다.
매크로 내부의 주석을 C 스타일 주석으로 변환합니다. 이것은 나중에 방지하기 위해
실수로 소스 행의 나머지 부분을 주석으로 처리하여 해당 매크로를 사용합니다.
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 -CC 옵션은 일반적으로 린트 주석을 지원하는 데 사용됩니다.
-전통적인 cpp
ISO C와 달리 구식 C 전처리기의 동작을 모방하십시오.
전처리기.
-삼각형
삼중 그래프 시퀀스를 처리합니다. 이들은 모두 로 시작하는 세 문자 시퀀스입니다.
??, 단일 문자를 나타내기 위해 ISO C에서 정의합니다. 예를 들어, ??/ 서
for \그래서 '??/N' 개행 문자 상수입니다. 기본적으로 GCC는 무시합니다.
trigraphs, 그러나 표준 준수 모드에서는 변환합니다. 참조 -표준 and -안시
옵션을 제공합니다.
XNUMX개의 삼극자와 그 대체품은 다음과 같습니다.
삼중 그래프: ??( ??) ??< ??> ??= ??/ ??' ??! ??-
대체: [ ] { } # \ ^ | ~
-다시 매핑
매우 짧은 파일만 허용하는 파일 시스템에서 작동하는 특수 코드 활성화
MS-DOS와 같은 이름.
--도움
-타겟 홀프
아무 것도 사전 처리하는 대신 모든 명령줄 옵션을 설명하는 텍스트를 인쇄합니다.
-v 상세 모드. 실행 시작 시 GNU CPP의 버전 번호를 출력하고,
포함 경로의 최종 형식을 보고합니다.
-H 다른 일반 활동과 함께 사용된 각 헤더 파일의 이름을 인쇄하십시오. 각
이름은 들여 쓰기가 얼마나 깊은지 보여줍니다. #포함 스택입니다. 미리 컴파일된 헤더
유효하지 않은 것으로 판명된 경우에도 파일도 인쇄됩니다. 잘못된 미리 컴파일된
헤더 파일은 다음과 같이 인쇄됩니다. ...NS 그리고 유효한 ...! .
-번역
--번역
GNU CPP의 버전 번호를 출력하십시오. 대시 한 번으로 평소와 같이 전처리를 진행합니다.
두 개의 대시로 즉시 종료하십시오.
통과 옵션 에 전에, 어셈블러
어셈블러에 옵션을 전달할 수 있습니다.
-와,option
패스 option 어셈블러에 대한 옵션으로. 만약에 option 쉼표가 포함되어 있으며 분할됩니다.
쉼표에서 여러 옵션으로.
-X어셈블러 option
패스 option 어셈블러에 대한 옵션으로. 이를 사용하여 시스템별
GCC가 인식하지 못하는 어셈블러 옵션.
인수를 취하는 옵션을 전달하려면 다음을 사용해야 합니다. -X어셈블러 두번,
옵션에 대해 한 번, 인수에 대해 한 번.
옵션 for 연결
이러한 옵션은 컴파일러가 개체 파일을 실행 파일에 연결할 때 작동합니다.
결과물 파일. 컴파일러가 링크 단계를 수행하지 않으면 의미가 없습니다.
개체 파일 이름
특수 인식 접미사로 끝나지 않는 파일 이름은 이름으로 간주됩니다.
개체 파일 또는 라이브러리. (객체 파일은 링커에 의해 라이브러리와 구별됩니다.
파일 내용에 따릅니다.) 링크가 완료되면 이러한 오브젝트 파일은 다음과 같이 사용됩니다.
링커에 입력합니다.
-c
-S
-E 이러한 옵션 중 하나를 사용하면 링커가 실행되지 않고 개체 파일 이름이
인수로 사용해서는 안됩니다.
-퓨즈-ld=bfd
사용 BFD 기본 링커 대신 링커.
-fuse-ld=금
사용 금 기본 링커 대신 링커.
-l도서관
-l 도서관
이름이 지정된 라이브러리 검색 도서관 링크할 때. (두 번째 대안은
라이브러리를 별도의 인수로 사용하는 것은 POSIX 준수만을 위한 것이며 권장되지 않습니다.)
명령에서 이 옵션을 작성하는 위치에 차이가 있습니다. 링커 검색
지정된 순서대로 라이브러리와 오브젝트 파일을 처리합니다. 따라서, 푸.오
-lz 바오 검색 라이브러리 z 파일 후 푸.오 하지만 전에 바오. 면 바오 를 의미
~에있는 기능들 z, 해당 기능이 로드되지 않을 수 있습니다.
링커는 라이브러리에 대한 표준 디렉토리 목록을 검색합니다.
이름이 지정된 파일 도서관. 그런 다음 링커는 이 파일을 지정된 것처럼 사용합니다.
정확히는 이름으로.
검색된 디렉토리에는 여러 표준 시스템 디렉토리와 사용자가 지정한 모든 디렉토리가 포함됩니다.
로 지정 -L.
일반적으로 이 방법으로 찾은 파일은 라이브러리 파일---구성원이 다음과 같은 아카이브 파일입니다.
개체 파일. 링커는 아카이브 파일을 통해 구성원을 검색하여 처리합니다.
지금까지 참조되었지만 정의되지 않은 기호를 정의합니다. 하지만 만약
발견된 파일은 일반 오브젝트 파일이며 일반적인 방식으로 링크됩니다. NS
사용의 유일한 차이점 -l 옵션을 선택하고 파일 이름을 지정하는 것은 -l
서라운드 도서관 과 lib and .a 여러 디렉토리를 검색합니다.
-lobjc
이 특별한 경우가 필요합니다. -l Objective-C 또는
오브젝티브-C++ 프로그램.
-nostart파일
연결할 때 표준 시스템 시작 파일을 사용하지 마십시오. 표준 시스템
라이브러리는 일반적으로 사용됩니다. -nostdlib or -nodefaultlibs 사용.
-nodefaultlibs
링크할 때 표준 시스템 라이브러리를 사용하지 마십시오. 지정한 라이브러리만
링커에 전달되고 시스템 라이브러리의 연결을 지정하는 옵션은 다음과 같습니다.
as -정적-libgcc or -공유-libgcc, 무시됩니다. 표준 시작 파일이 사용됩니다.
일반적으로 -nostart파일 사용.
컴파일러는 "memcmp", "memset", "memcpy" 및 "memmove"에 대한 호출을 생성할 수 있습니다. 이것들
항목은 일반적으로 libc의 항목으로 해결됩니다. 이러한 진입점은 다음과 같아야 합니다.
이 옵션이 지정되면 다른 메커니즘을 통해 제공됩니다.
-nostdlib
링크할 때 표준 시스템 시작 파일이나 라이브러리를 사용하지 마십시오. 시작하지 않음
파일과 지정한 라이브러리만 링커에 전달되고 옵션
다음과 같은 시스템 라이브러리의 연결 지정 -정적-libgcc or -공유-libgcc,
무시됩니다.
컴파일러는 "memcmp", "memset", "memcpy" 및 "memmove"에 대한 호출을 생성할 수 있습니다. 이것들
항목은 일반적으로 libc의 항목으로 해결됩니다. 이러한 진입점은 다음과 같아야 합니다.
이 옵션이 지정되면 다른 메커니즘을 통해 제공됩니다.
바이패스된 표준 라이브러리 중 하나 -nostdlib and -nodefaultlibs is libgcc.a은
GCC가 특정 단점을 극복하기 위해 사용하는 내부 서브루틴 라이브러리
기계 또는 일부 언어에 대한 특별한 요구 사항.
대부분의 경우 필요한 libgcc.a 다른 표준 라이브러리를 사용하지 않으려는 경우에도 마찬가지입니다.
즉, 지정할 때 -nostdlib or -nodefaultlibs 당신은 일반적으로
지정하다 -lgcc 또한. 이렇게 하면 에 대한 해결되지 않은 참조가 없습니다.
내부 GCC 라이브러리 서브루틴. (이러한 내부 서브루틴의 예는
"__main", C++ 생성자가 호출되도록 하는 데 사용됩니다.)
-파이
지원하는 대상에서 위치 독립적인 실행 파일을 생성합니다. 예측 가능한
결과에 따라 컴파일에 사용된 것과 동일한 옵션 세트도 지정해야 합니다(-파이,
-fPIE, 또는 모델 하위 옵션) 이 링커 옵션을 지정할 때.
-파이 없음
위치 독립적인 실행 파일을 생성하지 마십시오.
-역동적
깃발을 넘기다 -수출-동적 ELF 링커를 지원하는 대상에서. 이것
링커에 사용된 기호뿐만 아니라 모든 기호를 동적 기호에 추가하도록 지시합니다.
테이블. 이 옵션은 "dlopen"을 일부 사용하거나
프로그램 내에서 역추적.
-s 실행 파일에서 모든 기호 테이블 및 재배치 정보를 제거합니다.
-공전
동적 연결을 지원하는 시스템에서 이것은 공유와 연결을 방지합니다.
도서관. 다른 시스템에서는 이 옵션이 적용되지 않습니다.
-공유
공유 객체를 생성한 다음 다른 객체와 연결하여
실행 가능. 모든 시스템이 이 옵션을 지원하는 것은 아닙니다. 예측 가능한 결과를 얻으려면 다음을 수행해야 합니다.
또한 컴파일에 사용되는 동일한 옵션 세트를 지정합니다(-fpic, -fPIC, 또는 모델
하위 옵션) 이 링커 옵션을 지정할 때.[1]
-공유-libgcc
-정적-libgcc
제공하는 시스템에서 libgcc 공유 라이브러리로서 이러한 옵션은
각각 공유 또는 정적 버전입니다. 공유 버전이 없는 경우 libgcc 였다
컴파일러가 구성될 때 빌드된 경우 이러한 옵션은 효과가 없습니다.
응용 프로그램이 공유를 사용해야 하는 몇 가지 상황이 있습니다. libgcc
정적 버전 대신. 이들 중 가장 일반적인 것은 응용 프로그램이
다른 공유 라이브러리에서 예외를 throw하고 catch하려고 합니다. 그 경우,
각 라이브러리와 애플리케이션 자체는 공유를 사용해야 합니다. libgcc.
따라서 G++ 및 GCJ 드라이버는 자동으로 -공유-libgcc 빌드할 때마다
C++ 및 Java 프로그램이 일반적으로 사용하기 때문에 공유 라이브러리 또는 기본 실행 파일
예외이므로 이것이 옳은 일입니다.
대신 GCC 드라이버를 사용하여 공유 라이브러리를 생성하는 경우 공유 라이브러리가
항상 공유와 연결되어 있지는 않습니다. libgcc. GCC가 찾으면 해당 구성에서
옵션을 지원하지 않는 비 GNU 링커 또는 GNU 링커가 있는 시간
--eh-프레임-hdr, 공유 버전을 연결합니다. libgcc 에 의해 공유 라이브러리로
기본. 그렇지 않으면 링커를 이용하여 연결을 최적화합니다.
공유 버전으로 libgcc, libgcc의 정적 버전과 연결
기본. 이렇게 하면 예외가 이러한 공유 라이브러리를 통해 전파될 수 있습니다.
라이브러리 로드 시 재배치 비용이 발생합니다.
그러나 라이브러리 또는 기본 실행 파일이 예외를 throw하거나 catch해야 하는 경우
에서 사용되는 언어에 따라 G++ 또는 GCJ 드라이버를 사용하여 링크해야 합니다.
프로그램 또는 옵션 사용 -공유-libgcc, 공유와 연결되도록
libgcc.
-정적-리바산
때 -fsanitize=주소 옵션은 GCC 드라이버 프로그램을 연결하는 데 사용됩니다.
자동으로 링크 리바산. 면 리바산 공유 라이브러리로 사용할 수 있으며
전에, -공전 옵션이 사용되지 않으면 이 링크는 공유 버전의 리바산.
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 -정적-리바산 옵션은 GCC 드라이버가 링크하도록 지시합니다. 리바산 정적으로, 없이
반드시 다른 라이브러리를 정적으로 연결해야 합니다.
-정적-libtsan
때 -fsanitize=쓰레드 옵션은 GCC 드라이버 프로그램을 연결하는 데 사용됩니다.
자동으로 링크 리브산. 면 리브산 공유 라이브러리로 사용할 수 있으며
전에, -공전 옵션이 사용되지 않으면 이 링크는 공유 버전의 리브산.
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 -정적-libtsan 옵션은 GCC 드라이버가 링크하도록 지시합니다. 리브산 정적으로, 없이
반드시 다른 라이브러리를 정적으로 연결해야 합니다.
-정적-liblsan
때 -fsanitize=누출 옵션은 GCC 드라이버 프로그램을 연결하는 데 사용됩니다.
자동으로 링크 리블산. 면 리블산 공유 라이브러리로 사용할 수 있으며
전에, -공전 옵션이 사용되지 않으면 이 링크는 공유 버전의 리블산.
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 -정적-liblsan 옵션은 GCC 드라이버가 링크하도록 지시합니다. 리블산 정적으로, 없이
반드시 다른 라이브러리를 정적으로 연결해야 합니다.
-정적-libubsan
때 -fsanitize=정의되지 않음 옵션은 GCC 드라이버 프로그램을 연결하는 데 사용됩니다.
자동으로 링크 리부산. 면 리부산 공유 라이브러리로 사용할 수 있으며,
그리고 -공전 옵션이 사용되지 않으면 이 링크는 공유 버전의
리부산. 그만큼 -정적-libubsan 옵션은 GCC 드라이버가 링크하도록 지시합니다. 리부산
정적으로 다른 라이브러리를 정적으로 연결하지 않아도 됩니다.
-정적-libmpx
때 -fcheck 포인터 범위 and -mmpx 옵션은 GCC 프로그램을 연결하는 데 사용됩니다.
드라이버가 자동으로 링크 libmpx. 면 libmpx 공유로 사용 가능
도서관, 그리고 -공전 옵션이 사용되지 않으면 이 링크는 공유
버전 libmpx. 그만큼 -정적-libmpx 옵션은 GCC 드라이버가 링크하도록 지시합니다. libmpx
정적으로 다른 라이브러리를 정적으로 연결하지 않아도 됩니다.
-정적-libmpxwrappers
때 -fcheck 포인터 범위 and -mmpx 옵션 없이 프로그램을 연결하는 데 사용됩니다.
또한 사용 -fno-chkp-use-래퍼, GCC 드라이버가 자동으로
libmpx 래퍼. 면 libmpx 래퍼 공유 라이브러리로 사용할 수 있으며 -공전
옵션이 사용되지 않으면 이 링크는 공유 버전의 libmpx 래퍼. 그만큼
-정적-libmpxwrappers 옵션은 GCC 드라이버가 링크하도록 지시합니다. libmpx 래퍼
정적으로 다른 라이브러리를 정적으로 연결하지 않아도 됩니다.
-정적-libstdc++
때 g ++ 프로그램은 C++ 프로그램을 연결하는 데 사용되며 일반적으로 자동으로 연결됩니다.
반대 libstdc++. 면 libstdc++ 공유 라이브러리로 사용할 수 있으며 -공전
옵션이 사용되지 않으면 이 링크는 공유 버전의 libstdc++. 그건
일반적으로 괜찮습니다. 그러나 때때로 버전을 고정하는 것이 유용합니다. libstdc++
완전히 정적 링크로 이동하지 않고 프로그램에서 사용합니다. NS
-정적-libstdc++ 옵션은 g ++ 연결할 드라이버 libstdc++ 정적으로, 없이
반드시 다른 라이브러리를 정적으로 연결해야 합니다.
- 상징적
공유 객체를 빌드할 때 전역 기호에 대한 참조를 바인딩합니다. 경고
확인되지 않은 참조(링크 편집기 옵션으로 재정의되지 않는 한 -X링커 -z
-X링커 데프). 소수의 시스템만이 이 옵션을 지원합니다.
-T 스크립트
스크립트 링커 스크립트로. 이 옵션은 다음을 사용하는 대부분의 시스템에서 지원됩니다.
GNU 링커. 운영 체제가 없는 베어보드 대상과 같은 일부 대상에서는
전에, -T 정의되지 않은 기호에 대한 참조를 피하기 위해 링크할 때 옵션이 필요할 수 있습니다.
-X링커 option
패스 option 링커에 대한 옵션으로. 이를 사용하여 시스템별
GCC가 인식하지 못하는 링커 옵션.
별도의 인수를 취하는 옵션을 전달하려면 다음을 사용해야 합니다. -X링커
두 번, 옵션에 대해 한 번, 인수에 대해 한 번. 예를 들어 통과하려면 -주장하다
정의, 작성해야합니다 -X링커 -주장하다 -X링커 정의. 작동하지 않습니다
작성 -X링커 "-주장하다 정의", 이것은 전체 문자열을
링커가 기대하는 것과 다른 단일 인수.
GNU 링커를 사용할 때 일반적으로 링커에 인수를 전달하는 것이 더 편리합니다.
옵션을 사용하여 option=가치 별도의 인수가 아닌 구문입니다. 예를 들어, 당신은
지정할 수 있습니다 -X링커 -지도=출력.지도 보다는 -X링커 -지도 -X링커 출력.맵.
다른 링커는 명령줄 옵션에 대해 이 구문을 지원하지 않을 수 있습니다.
-NS,option
패스 option 링커에 대한 옵션으로. 만약에 option 쉼표가 포함되어 있습니다.
쉼표에 여러 옵션이 있습니다. 이 구문을 사용하여 인수를
선택권. 예를 들면 -Wl,-Map, output.map 패스 -지도 출력.맵 링커에. 언제
GNU 링커를 사용하면 다음과 같은 효과를 얻을 수도 있습니다. -Wl, -Map = output.map.
참고: Ubuntu 8.10 이상 버전에서 LDFLAGS의 경우 옵션 -Wl,-z,relro 사용.
비활성화하려면 다음을 사용하십시오. -Wl,-z,노렐로.
-u 상징
기호 척 상징 정의되지 않음, 라이브러리 모듈을 강제로 연결하여 정의
그것. 당신이 사용할 수있는 -u 로드를 강제로 다른 기호로 여러 번
추가 라이브러리 모듈.
-z 키워드는
-z 키워드와 함께 링커에 직접 전달됩니다. 키워드는. 섹션 참조
허용된 값과 그 의미는 링커 설명서에서 확인하세요.
옵션 for 명부 담당 검색
이 옵션은 헤더 파일, 라이브러리 및 부품을 검색할 디렉토리를 지정합니다.
컴파일러의:
-IDIR
디렉토리 추가 DIR 헤더를 검색할 디렉토리 목록의 헤드로
파일. 이것은 시스템 헤더 파일을 무시하고 자신의 헤더 파일을 대체하는 데 사용할 수 있습니다.
버전, 이러한 디렉토리는 시스템 헤더 파일보다 먼저 검색되기 때문에
디렉토리. 그러나 다음을 포함하는 디렉토리를 추가하는 데 이 옵션을 사용해서는 안 됩니다.
공급업체 제공 시스템 헤더 파일(사용 -아이시스템 그에 대한). XNUMX개 이상 사용하는 경우
-I 옵션을 선택하면 디렉토리가 왼쪽에서 오른쪽으로 스캔됩니다. 표준 시스템
디렉토리가 뒤에 옵니다.
표준 시스템에 디렉토리가 포함되거나 다음으로 지정된 디렉토리가 있는 경우 -아이시스템이다
와도 지정 -IWalk Through California 프로그램, -I 옵션은 무시됩니다. 디렉토리는 여전히 검색되지만
시스템의 정상적인 위치에 있는 시스템 디렉토리로 체인이 포함됩니다. 이것은
버그가 있는 시스템 헤더를 수정하는 GCC의 절차와
"include_next" 지시문이 실수로 변경되지 않았습니다. 정말 바꿔야 한다면
시스템 디렉토리에 대한 검색 순서는 다음을 사용하십시오. -Nostdinc 및 / 또는 -아이시스템 옵션을 제공합니다.
-iplugindir=DIR
에 의해 전달된 플러그인을 검색할 디렉토리를 설정합니다. -f플러그인=name 대신
-f플러그인=통로/name.그래서. 이 옵션은 사용자가 사용하기 위한 것이 아니라
운전자가 지나쳤습니다.
- 인용DIR
디렉토리 추가 DIR 헤더를 검색할 디렉토리 목록의 헤드로
"#include "의 경우에만 파일파일""; 그들은 "#include에 대해 검색되지 않습니다
<파일>", 그렇지 않으면 처럼 -I.
-LDIR
디렉토리 추가 DIR 검색할 디렉토리 목록으로 -l.
-B접두사
이 옵션은 실행 파일, 라이브러리, 포함 파일 및
컴파일러 자체의 데이터 파일.
컴파일러 드라이버 프로그램은 하나 이상의 하위 프로그램을 실행합니다. CPP, cc1, as and ld.
그것은 시도 접두사 실행하려는 각 프로그램의 접두사로 사용 여부와 관계없이
기계/버전/.
실행할 각 하위 프로그램에 대해 컴파일러 드라이버는 먼저 다음을 시도합니다. -B 접두사(있는 경우).
해당 이름을 찾을 수 없거나 -B 지정되지 않은 경우 드라이버는 두 가지 표준을 시도합니다.
접두사, /usr/lib/gcc/ and /usr/local/lib/gcc/. 둘 다 결과가 없으면
발견된 파일 이름, 수정되지 않은 프로그램 이름을 사용하여 검색
귀하의 디렉토리에 지정된 PATH 환경 변수.
컴파일러는 경로가 제공되었는지 확인합니다. -B 디렉토리를 참조하고 만약
필요한 경우 경로 끝에 디렉토리 구분 문자를 추가합니다.
-B 디렉토리 이름을 효과적으로 지정하는 접두사는 라이브러리의 라이브러리에도 적용됩니다.
컴파일러가 이러한 옵션을 -L 링커에 대한 옵션.
컴파일러가 번역하기 때문에 전처리기의 포함 파일에도 적용됩니다.
이러한 옵션을 -아이시스템 전처리기 옵션. 이 경우 컴파일러는
추가 들 접두사에.
런타임 지원 파일 libgcc.a 를 사용하여 검색할 수도 있습니다. -B 접두사, 경우
필요. 거기에 없으면 위의 두 가지 표준 접두사가 시도되고
모두입니다. 이러한 방법으로 파일을 찾지 못하면 파일이 링크에서 제외됩니다.
접두사를 지정하는 또 다른 방법은 다음과 같습니다. -B 접두사는 환경을 사용하는 것입니다
변수 GCC_EXEC_PREFIX.
특별한 kludge로 경로가 제공되는 경우 -B is [디렉터리/]스테이지N/어디로 N 숫자이다
0에서 9 사이의 범위에서 다음으로 대체됩니다. [디렉터리/]포함. 이것은 부팅을 돕기 위한 것입니다-
컴파일러를 묶습니다.
-사양=파일
방법 파일 컴파일러가 표준을 읽은 후 명세서 파일을 재정의하기 위해
기본값은 GCC 드라이버 프로그램은 전달할 스위치를 결정할 때 사용합니다.
에 cc1, 씨원플러스, as, ld등. 하나 이상 -사양=파일 에 지정할 수 있습니다.
명령줄에서 왼쪽에서 오른쪽으로 순서대로 처리됩니다.
--sysroot=DIR
DIR 헤더 및 라이브러리에 대한 논리적 루트 디렉토리로 사용됩니다. 예를 들어,
컴파일러는 일반적으로 다음에서 헤더를 검색합니다. / usr / include 및 라이브러리 를 / usr / lib에, 그
대신 검색 디렉토리/usr/포함 and 디렉토리/usr/lib.
이 옵션과 -isysroot 옵션을 선택한 다음 --sysroot option
도서관에 적용되지만 -isysroot 옵션은 헤더 파일에 적용됩니다.
GNU 링커(버전 2.16부터 시작)에는 이에 대한 필요한 지원이 있습니다.
옵션. 링커가 이 옵션을 지원하지 않으면 헤더 파일 측면에서
--sysroot 여전히 작동하지만 라이브러리 측면은 작동하지 않습니다.
--no-sysroot-접미사
일부 대상의 경우 다음으로 지정된 루트 디렉토리에 접미사가 추가됩니다. --sysroot,
사용된 다른 옵션에 따라 헤더는 예를 들어 다음 위치에서 찾을 수 있습니다.
디렉토리/접미사/usr/포함 대신 디렉토리/usr/포함. 이 옵션은 추가를 비활성화합니다
그런 접미사의.
-나는- 이 옵션은 더 이상 사용되지 않습니다. 이용 해주세요 - 인용 대신 -I 이전 디렉토리
전에, -나는- 및 제거 -나는- 옵션. 지정한 모든 디렉토리 -I 전에 옵션
전에, -나는- 옵션은 "#include "의 경우에만 검색됩니다.파일""; 그들은 아니다
"#포함"을 검색했습니다.파일>".
추가 디렉토리가 지정된 경우 -I 이후의 옵션 -나는- 옵션, 이들
디렉토리는 모든 "#include" 지시문을 검색합니다. (보통 모든 -I
디렉토리는 이런 식으로 사용됩니다.)
또한, -나는- 이 옵션은 현재 디렉토리의 사용을 금지합니다(여기서
현재 입력 파일은 "#include "에 대한 첫 번째 검색 디렉토리에서 왔습니다.파일"".
이 효과를 무시할 수 있는 방법은 없습니다. -나는-. 과 -나는. 검색을 지정할 수 있습니다
컴파일러가 호출될 때 현재 디렉토리입니다. 정확히는 아니다.
전처리기가 기본적으로 수행하는 것과 동일하지만 종종 만족스럽습니다.
-나는- 헤더 파일에 대한 표준 시스템 디렉토리의 사용을 금지하지 않습니다.
따라서, -나는- and -Nostdinc 독립적입니다.
지정 목표 머신 and 컴파일러 버전
GCC를 실행하는 일반적인 방법은 GCC및 기계-gcc 교차할 때
컴파일하거나 기계-gcc-버전 설치된 버전이 아닌 다른 버전을 실행하려면
마지막.
하드웨어 모델 and 구성
각 대상 머신 유형은 다음과 같이 고유한 특수 옵션을 가질 수 있습니다. -m, 선택
다양한 하드웨어 모델 또는 구성 중에서 ---예: 68010 대 68020, 부동
보조 프로세서 또는 없음. 단일 설치된 컴파일러 버전은 모든 모델에 대해 컴파일할 수 있습니다.
또는 지정된 옵션에 따라 구성합니다.
컴파일러의 일부 구성은 일반적으로 다음과 같은 추가 특수 옵션도 지원합니다.
동일한 플랫폼의 다른 컴파일러와의 호환성.
AAArch64 옵션
이러한 옵션은 AArch64 구현에 대해 정의됩니다.
-마비=name
지정된 데이터 모델에 대한 코드를 생성합니다. 허용되는 값은 ilp32 SysV용
int, long int 및 포인터가 32비트인 데이터 모델과 같이 lp64 SysV 유사용
int는 32비트이지만 long int와 포인터는 64비트인 데이터 모델입니다.
기본값은 특정 대상 구성에 따라 다릅니다. LP64 및
ILP32 ABI는 링크와 호환되지 않습니다. 전체 프로그램을 동일한 파일로 컴파일해야 합니다.
ABI 및 호환 가능한 라이브러리 세트와의 링크.
-mbig-엔디안
빅 엔디안 코드를 생성합니다. 이것은 GCC가
aarch64_be-*-* 대상입니다.
-mgeneral-regs-only.
일반 레지스터만 사용하는 코드를 생성합니다.
-미리틀 엔디안
리틀 엔디안 코드를 생성합니다. 이것은 GCC가
아치64-*-* 하지만 aarch64_be-*-* 대상입니다.
-mcmodel=작은
작은 코드 모델에 대한 코드를 생성합니다. 프로그램 및 정적으로 정의된 기호
서로 1GB 이내여야 합니다. 포인터는 64비트입니다. 프로그램은 정적으로
또는 동적으로 연결됩니다. 이 모델은 완전히 구현되지 않았으며 대부분 다음과 같이 처리됩니다.
작은.
-mcmodel=작은
작은 코드 모델에 대한 코드를 생성합니다. 프로그램과 정적으로 정의된 프로그램
기호는 서로 4GB 이내여야 합니다. 포인터는 64비트입니다. 프로그램 수
정적으로 또는 동적으로 연결됩니다. 이것은 기본 코드 모델입니다.
-mcmodel=대형
대규모 코드 모델에 대한 코드를 생성합니다. 이것은 주소와
섹션의 크기. 포인터는 64비트입니다. 프로그램은 정적으로만 연결할 수 있습니다.
-mstrict-정렬
정렬되지 않은 메모리 참조가 시스템에서 처리된다고 가정하지 마십시오.
-momit-리프 프레임 포인터
-mno-생략-리프-프레임-포인터
리프 함수에서 프레임 포인터를 생략하거나 유지합니다. 이전의 행동은
태만.
-mtls-dialect=desc
TLS의 동적 액세스를 위한 스레드 로컬 스토리지 메커니즘으로 TLS 설명자를 사용합니다.
변수. 이것이 기본값입니다.
-mtls-dialect=전통
TLS의 동적 액세스를 위한 스레드 로컬 스토리지 메커니즘으로 기존 TLS 사용
변수.
-mfix-cortex-a53-835769
-mno-fix-cortex-a53-835769
ARM Cortex-A53 정오표 번호 835769에 대한 해결 방법을 활성화하거나 비활성화합니다.
메모리 명령어와 64비트 정수 사이에 NOP 명령어 삽입
명령을 곱합니다.
-mfix-cortex-a53-843419
-mno-fix-cortex-a53-843419
ARM Cortex-A53 정오표 번호 843419에 대한 해결 방법을 활성화하거나 비활성화합니다.
정오표 해결 방법은 링크 시간에 만들어지며 해당 플래그만 전달합니다.
링커에.
-행진=name
선택적으로 하나 이상의 접미사가 붙는 대상 아키텍처의 이름을 지정합니다.
기능 수정자. 이 옵션의 형식은 -행진=아치{+[아니]기능}*, 여기서
에 대해서만 허용되는 값 아치 is armv8-a. 에 대한 허용 값 기능 are
아래 하위 섹션에 설명되어 있습니다.
충돌하는 기능 수정자가 지정된 경우 가장 오른쪽에 있는 기능이 사용됩니다.
GCC는 이 이름을 사용하여 생성할 때 어떤 종류의 명령을 내보낼 수 있는지 결정합니다.
어셈블리 코드.
어디에 -XNUMX 월 다음 중 하나 없이 지정됩니다. -mtune or -mcpu 또한 지정되고,
코드는
대상 아키텍처.
-mtune=name
GCC가 성능을 조정해야 하는 대상 프로세서의 이름을 지정합니다.
코드. 이 옵션에 허용되는 값은 다음과 같습니다. 일반적인, 피질 -a53, 피질 -a57,
피질 -a72, 엑시노스-m1, 천둥, xgene1.
또한 이 옵션은 GCC가 코드의 성능을 조정하도록 지정할 수 있습니다.
big.LITTLE 시스템용. 이 옵션에 허용되는 값은 다음과 같습니다.
피질-a57.피질-a53, 피질-a72.피질-a53.
어디에도 -mtune=, -mcpu = or -행진= 지정되면 코드가 수행하도록 조정됩니다.
다양한 대상 프로세서에 걸쳐 있습니다.
이 옵션은 기능 수정자로 접미어를 붙일 수 없습니다.
-mcpu =name
선택적으로 하나 이상의 기능이 접미사로 붙는 대상 프로세서의 이름을 지정합니다.
수정자. 이 옵션의 형식은 -mcpu =CPU{+[아니]기능}*, 허용되는 경우
값 CPU 에 사용할 수 있는 것과 동일합니다. -mtune.
에 대한 허용 값 기능 아래 하위 섹션에 설명되어 있습니다.
충돌하는 기능 수정자가 지정된 경우 가장 오른쪽에 있는 기능이 사용됩니다.
GCC는 이 이름을 사용하여 생성할 때 어떤 종류의 명령을 내보낼 수 있는지 결정합니다.
어셈블리 코드(마치 -XNUMX 월) 및 대상 프로세서를 결정하기 위해
성능 조정(마치 -mtune). 이 옵션이 다음과 함께 사용되는 경우
-XNUMX 월 or -mtune, 해당 옵션은 이 항목의 해당 부분보다 우선합니다.
옵션을 선택합니다.
-XNUMX 월 and -mcpu 기능 수정자
와 함께 사용되는 기능 수정자 -XNUMX 월 and -mcpu 다음 중 하나일 수 있습니다.
CRM CRC 확장을 활성화합니다.
암호화는
암호화 확장을 활성화합니다. 이는 고급 SIMD가 활성화되었음을 의미합니다.
fp 부동 소수점 명령어를 활성화합니다.
SIMD
고급 SIMD 지침을 활성화합니다. 이것은 부동 소수점 명령어가
활성화. 이것은 현재 가능한 모든 옵션 값의 기본값입니다. -XNUMX 월 and
-mcpu =.
아답테바 출현 옵션
Bowman의 -m 옵션은 Adapteva Epiphany에 대해 정의됩니다.
-mhalf-reg-파일
"r32"..."r63" 범위의 레지스터를 할당하지 마십시오. 코드를 실행할 수 있는
이러한 레지스터가 없는 하드웨어 변형.
-mprefer-짧은-insn-regs
짧은 명령어 생성을 허용하는 레지스터를 우선적으로 할당합니다. 이것은 할 수 있습니다
결과적으로 명령어 수가 증가하므로 전체적으로 감소하거나 증가할 수 있습니다.
코드 크기.
-mbranch 비용=NUM
분기 비용을 대략적으로 설정 NUM "간단한" 지침. 이 비용은 단지
발견적이며 릴리스 간에 일관된 결과를 생성하지 않을 수 있습니다.
-mcmmove
조건부 이동 생성을 활성화합니다.
-mnops=NUM
방출 NUM 생성된 다른 모든 명령어 전에 NOP.
-mno-soft-cmpsf
단정밀도 부동 소수점 비교의 경우 "fsub" 명령어를 내보내고 테스트하십시오.
플래그. 이것은 소프트웨어 비교보다 빠르지만 잘못된 결과를 얻을 수 있습니다.
NaN이 있거나 두 개의 다른 작은 숫자가 다음과 같이 비교될 때
그들의 차이는 XNUMX으로 계산됩니다. 기본값은 -msoft-cmpsf, 어떤 용도
느리지만 IEEE 호환 소프트웨어 비교.
-mstack 오프셋=NUM
스택 상단과 스택 포인터 사이의 오프셋을 설정합니다. 예: 8의 값
"sp+0...sp+7" 범위의 XNUMX바이트를 리프 함수에서 사용할 수 있음을 의미합니다.
스택 할당 없이 이외의 값 8 or 16 테스트되지 않았으며 가능성이 낮습니다.
일하다. 또한 이 옵션은 ABI를 변경합니다. 프로그램을 컴파일
라이브러리가 컴파일된 것과 다른 스택 오프셋은 일반적으로 그렇지 않습니다.
일하다. 이 옵션은 스택 오프셋이 다른지 평가하려는 경우에 유용할 수 있습니다.
더 나은 코드를 제공하지만 실제로 다른 스택 오프셋을 사용하여 빌드하려면
프로그램이 작동하는 경우 적절한 도구 체인을 구성하는 것이 좋습니다.
--스택 오프셋 포함=NUM 옵션을 선택합니다.
-mno-round-가장 가까운
스케줄러가 반올림 모드가 자르기로 설정되었다고 가정하도록 합니다. NS
기본값은 -mround-가장 가까운.
-mlong-통화
속성에 의해 달리 지정되지 않은 경우 모든 호출이
"b" / "bl" 명령어의 오프셋 범위, 따라서 함수 주소 로드
(그렇지 않으면 직접) 호출을 수행하기 전에 레지스터에 넣습니다. 이것이 기본값입니다.
-m짧은 통화
속성에 의해 달리 지정되지 않은 경우 모든 직접 호출이 범위에 있다고 가정합니다.
"b" / "bl" 명령어 중 하나이므로 직접 호출에 이 지침을 사용하십시오. NS
기본값은 -mlong-통화.
-msmall16
주소가 16비트 부호 없는 값으로 로드될 수 있다고 가정합니다. 이것은 적용되지 않습니다
기능 주소 -mlong-통화 의미론이 유효합니다.
-mfp 모드=모드
부동 소수점 단위의 기본 모드를 설정합니다. 이것은 부동을 결정합니다.
함수 호출 및 반환 시점에 제공되고 예상되는 포인트 모드입니다. 만들기
이 모드는 기능 시작 시 주로 필요한 모드와 일치하여
불필요한 모드 전환을 방지하여 프로그램을 더 작고 빠르게 만듭니다.
모드 다음 값 중 하나로 설정할 수 있습니다.
발신자
기능 진입 시 모든 모드가 유효하며, 기능 진입 시 유지 또는 복원됩니다.
반환하고 다른 함수를 호출할 때. 이 모드는 컴파일에 유용합니다.
다른 라이브러리에 통합할 수 있는 라이브러리 또는 기타 컴파일 단위
널리 사용되는 FPU 모드가 다른 프로그램 및
단일 개체 파일을 사용하면 추가 모드에 대한 크기와 속도 오버헤드가 더 큽니다.
필요할 수 있는 전환,
일반적인 FPU 모드의 특정 선택.
자르다
이것은 잘림(예: 반올림)이 있는 부동 소수점 계산에 사용되는 모드입니다.
XNUMX으로) 반올림 모드. 여기에는 부동 소수점에서
정수.
가장 가까운
이것은 가장 가까운 값으로 반올림하는 부동 소수점 계산에 사용되는 모드입니다.
짝수 반올림 모드.
INT 이것은 FPU에서 정수 계산을 수행하는 데 사용되는 모드입니다. 예: 정수
곱하기 또는 정수 곱하기 및 누산.
디폴트는 -mfp-mode=호출자
-mnosplit-lohi
-mno-postinc
-mno-사후 수정
32비트 로드 분할을 각각 비활성화하는 코드 생성 조정,
사후 증가 주소 생성 및 사후 수정 주소 생성. NS
기본값은 msplit-lohi, -mpost-inc및 -mpost 수정.
-mnovect-더블
기본 SIMD 모드를 SImode로 변경합니다. 기본값은 -mvect-더블, 어떤 용도
DImode를 기본 SIMD 모드로 사용합니다.
-최대 벡터 정렬=NUM
SIMD 벡터 모드 유형에 대한 최대 정렬입니다. NUM 4 또는 8일 수 있습니다. 기본값은
8. 많은 라이브러리 함수 인터페이스가
크기 및/또는 크기에 영향을 주는 위치에서 SIMD 벡터 모드를 사용하지 않으면 영향을 받지 않습니다.
관련 유형의 정렬.
-msplit-vecmove-early
분할 벡터는 다시 로드하기 전에 단일 단어로 이동합니다. 이론적으로 이것은 줄 수 있습니다
더 나은 레지스터 할당이지만 지금까지는 일반적으로 그 반대인 것 같습니다.
-m1reg-등록 번호
-1 상수를 유지하는 레지스터를 지정하면 로딩이 작아집니다.
상수 및 특정 비트마스크가 더 빠릅니다. 허용되는 값 등록 번호 are r43 and r63,
해당 레지스터를 고정 레지스터로 사용하도록 지정하고, 없음, 이는 없음을 의미합니다
이를 위해 레지스터가 사용됩니다. 기본값은 -m1reg-없음.
ARC 옵션
다음 옵션은 코드가 컴파일되는 아키텍처 변형을 제어합니다.
-mbarrel-shifter
배럴 시프터가 지원하는 명령을 생성합니다. 다음이 아니면 기본값입니다.
-mcpu=ARC601 유효합니다.
-mcpu =CPU
아키텍처 유형, 레지스터 사용 및 명령어 스케줄링 매개변수 설정 CPU.
이전 버전과의 호환성을 위해 사용할 수 있는 바로 가기 별칭 옵션도 있습니다.
편의. 지원되는 값 CPU are
ARC600
ARC600용으로 컴파일합니다. 별칭: -mA6, -mARC600.
ARC601
ARC601용으로 컴파일합니다. 별명: -mARC601.
ARC700
ARC700용으로 컴파일합니다. 별칭: -mA7, -mARC700. 구성 시 기본값입니다.
과 ---cpu=arc700 포함.
-mdpfp
-mdpfp-컴팩트
FPX: 컴팩트 구현을 위해 조정된 배정밀도 FPX 명령어를 생성합니다.
-mdpfp-빠른
FPX: 빠른 구현을 위해 조정된 배정밀도 FPX 명령어를 생성합니다.
-mno-dpfp-lrsr
FPX 확장 보조 레지스터를 사용하지 못하도록 LR 및 SR 명령어를 비활성화합니다.
-메아
확장 산술 명령어를 생성합니다. 현재 "divaw", "add", "subs",
및 "sat16"이 지원됩니다. 이것은 항상 활성화되어 있습니다. -mcpu=ARC700.
-mno-mpy
ARC700에 대한 mpy 명령을 생성하지 마십시오.
-mmul32x16
32x16비트 곱셈 및 mac 명령어를 생성합니다.
-mmul64
mul64 및 mulu64 명령어를 생성합니다. 에 대해서만 유효 -mcpu=ARC600.
-일반
규범 명령을 생성합니다. 다음과 같은 경우 기본값입니다. -mcpu=ARC700 유효합니다.
-mspfp
-mspfp-컴팩트
FPX: 컴팩트 구현을 위해 조정된 단정밀도 FPX 명령어를 생성합니다.
-mspfp-빠른
FPX: 빠른 구현을 위해 조정된 단정밀도 FPX 명령어를 생성합니다.
-msimd
대상별 내장 기능을 통해 ARC SIMD 명령어 생성을 활성화합니다. 유효한
for -mcpu=ARC700.
-msoft-float
이 옵션은 무시됩니다. 호환성 목적으로만 제공됩니다. 소프트웨어
부동 소수점 코드는 기본적으로 내보내지며 이 기본값은 FPX에서 재정의할 수 있습니다.
옵션; mspfp, mspfp-컴팩트및 mspfp-빠른 단정밀도를 위해, 그리고 mdpfp, mdpfp-
팩트및 mdpfp-빠른 배정밀도를 위해.
-mswap
스왑 명령을 생성합니다.
다음 옵션은 어셈블러로 전달되고 전처리기를 정의합니다.
매크로 기호.
-mdsp-패카
DSP 팩 A 확장을 활성화하기 위해 어셈블러로 전달됩니다. 또한 설정
전처리기 기호 "__Xdsp_packa".
-mdvbf
이중 viterbi 나비 확장을 활성화하기 위해 어셈블러로 전달됩니다. 또한
전처리기 기호 "__Xdvbf"를 설정합니다.
-mlock
Locked Load/Store Conditional 확장을 활성화하기 위해 어셈블러로 전달됩니다.
또한 전처리기 기호 "__Xlock"을 설정합니다.
-mmac-d16
어셈블러에게 전달됩니다. 또한 전처리기 기호 "__Xxmac_d16"을 설정합니다.
-mmac-24
어셈블러에게 전달됩니다. 또한 전처리기 기호 "__Xxmac_24"를 설정합니다.
-mrtsc
64비트 타임스탬프 카운터 확장을 활성화하기 위해 어셈블러로 전달
지침. 또한 전처리기 기호 "__Xrtsc"를 설정합니다.
-mswap
스왑 바이트 주문 확장 명령어를 활성화하기 위해 어셈블러로 전달됩니다.
또한 전처리기 기호 "__Xswape"를 설정합니다.
-전화
이중 및 단일 피연산자 명령어를 활성화하기 위해 어셈블러로 전달
전화. 또한 전처리기 기호 "__Xtelephony"를 설정합니다.
-mxy
XY 메모리 확장을 활성화하기 위해 어셈블러로 전달됩니다. 또한 설정
전처리기 기호 "__Xxy".
다음 옵션은 어셈블리 코드에 주석을 추가하는 방법을 제어합니다.
-사이즈를 잘못 맞추다
예상 주소로 어셈블러 명령에 주석을 답니다.
-mannotate 정렬
어떤 정렬 고려 사항이 지침을 내리기로 결정했는지 설명하십시오.
짧거나 길다.
다음 옵션이 링커로 전달됩니다.
-마크리눅스
"arclinux" 에뮬레이션의 사용을 지정하기 위해 링커로 전달됩니다. 이 옵션
"arc-linux-uclibc"용으로 빌드된 도구 체인에서 기본적으로 활성화되어 있으며
프로파일링이 요청되지 않은 경우 "arceb-linux-uclibc"가 대상입니다.
-marclinux_prof
"arclinux_prof" 에뮬레이션의 사용을 지정하기 위해 링커로 전달됩니다. 이것
옵션은 "arc-linux-uclibc"용으로 빌드된 도구 체인에서 기본적으로 활성화되어 있으며
"arceb-linux-uclibc"는 프로파일링이 요청될 때 대상입니다.
다음 옵션은 생성된 코드의 의미를 제어합니다.
-mepilogue-cfi
에필로그에 대한 호출 프레임 정보 생성을 활성화합니다.
-mno-에필로그-cfi
에필로그에 대한 호출 프레임 정보 생성을 비활성화합니다.
-mlong-통화
호출 insns를 등록 간접 호출로 생성하여 전체 액세스를 제공합니다.
32비트 주소 범위.
-중간 통화
사용 가능한 오프셋인 호출에 25비트 주소 지정 범위 미만을 사용하지 마십시오.
무조건 분기 및 링크 명령의 경우. 함수의 조건부 실행
25비트 범위가 아닌 21비트 범위를 사용할 수 있도록 호출이 억제됩니다.
조건부 분기 및 링크 사용. 이것은 다음을 위해 구축된 도구 체인의 기본값입니다.
"arc-linux-uclibc" 및 "arceb-linux-uclibc" 대상.
-mno-sdata
sdata 참조를 생성하지 마십시오. 이것은 다음을 위해 구축된 도구 체인의 기본값입니다.
"arc-linux-uclibc" 및 "arceb-linux-uclibc" 대상.
-mucb-mcount
UCB 코드에서 사용되는 mcount 호출이 있는 계측기. 즉, 수신자에서 계산을 수행합니다.
호출자가 아닙니다. 기본적으로 ARC 계측은 호출자에서 계산됩니다.
-m휘발성 캐시
휘발성 참조에 대해 일반적으로 캐시된 메모리 액세스를 사용합니다. 이것이 기본값입니다.
-mno-휘발성 캐시
휘발성 참조에 대해 캐시 우회를 활성화합니다.
다음 옵션은 코드 생성을 미세 조정합니다.
-악성 호출
호출 명령에 대한 정렬 최적화를 수행합니다.
-mauto-수정-reg
레지스터 변위와 함께 사전/사후 수정 사용을 활성화합니다.
-mbbit-구멍
bbit peephole2를 활성화합니다.
-mno-brcc
이 옵션은 대상별 패스 인을 비활성화합니다. arc_reorg "BRcc"를 생성하기 위해
지침. 결합기 패스에 의해 구동되는 "BRcc" 생성에는 영향을 미치지 않습니다.
-mcase-벡터-pcrel
PC 기준 스위치 케이스 테이블 사용 - 케이스 테이블 단축이 가능합니다. 이것이
기본값 - 오스.
-mcompact-casesi
컴팩트 casei 패턴을 활성화합니다. 에 대한 기본값입니다. - 오스.
-mno-조건-exec
조건부 실행 명령을 생성하려면 ARCompact 특정 패스를 비활성화하십시오. 로 인한
피연산자 번호, 리터럴 크기,
명령 길이, 조건부 실행 지원, 대상 독립적
조건부 실행을 생성하기 위한 패스는 종종 부족하므로 ARC 포트는
더 많은 조건부 실행 생성을 찾으려는 특수 패스
레지스터 할당, 분기 단축 및 지연 슬롯 스케줄링 이후의 기회
완료되었습니다. 이 패스는 일반적으로 항상 그런 것은 아니지만 성능과 코드를 향상시킵니다.
추가 컴파일 시간의 비용으로 크기를 전환할 수 있는 옵션이 있습니다.
꺼져. 허용 오프셋을 초과하는 호출 명령에 문제가 있는 경우
범위는 조건부이므로 사용을 고려해야 합니다. -중간 통화
대신.
-거의-cbranchsi
cbranchsi 패턴의 사전 다시 로드 사용을 활성화합니다.
-mexpand-adddi
rtl 생성 시 "adddi3" 및 "subdi3"을 "add.f", "adc" 등으로 확장합니다.
-mindexed 로드
인덱싱된 로드 사용을 활성화합니다. 일부 옵티마이저 때문에 문제가 될 수 있습니다.
인덱싱된 저장소가 있다고 가정하지만 그렇지 않습니다.
-mlra
로컬 레지스터 할당을 활성화합니다. 이것은 ARC에 대해 아직 실험적이므로 기본적으로
컴파일러는 표준 다시 로드를 사용합니다(즉, -mno-lra).
-mlra-우선순위-없음
대상 레지스터에 대한 우선 순위를 표시하지 마십시오.
-mlra-우선순위-컴팩트
r0..r3 / r12..r15에 대한 대상 레지스터 우선 순위를 나타냅니다.
-mlra-우선순위-비컴팩트
r0..r3 / r12..r15에 대한 대상 등록자 우선 순위를 줄입니다.
-mno-밀리코드
크기 최적화 시(사용 - 오스), 저장해야 하는 프롤로그 및 에필로그 또는
많은 수의 레지스터를 복원하는 것은 종종 특수 호출을 사용하여 단축됩니다.
libgcc의 기능; 이것을 라고 한다 밀리코드 전화. 이러한 호출이 발생할 수 있으므로
성능 문제 및/또는 비표준 방식으로 연결할 때 연결 문제 발생,
이 옵션은 밀리코드 호출 생성을 끄기 위해 제공됩니다.
-mm혼합 코드
16비트 명령어 생성을 돕기 위해 레지스터 할당을 조정합니다. 이것은 일반적으로
명령어를 늘리면서 평균 명령어 크기를 줄이는 효과
카운트.
-mq 클래스
'q' 명령어 대안을 활성화합니다. 에 대한 기본값입니다. - 오스.
-mRcq
Rcq 제약 처리 활성화 - 대부분의 짧은 코드 생성은 이에 따라 달라집니다. 이것은
기본값.
-mRcw
Rcw 제약 처리 활성화 - ccfsm condexec은 대부분 이에 의존합니다. 이것이
태만.
-msize 수준=수평
명령 길이 및 정렬과 관련하여 크기 최적화를 미세 조정합니다. NS
인정된 가치 수평 위치 :
0 크기 최적화가 없습니다. 이 수준은 더 이상 사용되지 않으며 다음과 같이 처리됩니다. 1.
1 짧은 지침은 기회에 따라 사용됩니다.
2 또한 배리어가 삭제된 후 루프 및 코드 정렬이 가능합니다.
3 또한 선택적 데이터 정렬이 삭제되고 옵션이 Os 사용 가능합니다.
기본적으로 3 언제 - 오스 유효합니다. 그렇지 않으면 이것이 아닐 때의 동작
세트는 레벨과 동일합니다. 1.
-mtune=CPU
에 대한 명령 스케줄링 매개변수 설정 CPU, -mcpu =.
지원되는 값 CPU are
ARC600
ARC600 CPU에 맞게 조정합니다.
ARC601
ARC601 CPU에 맞게 조정합니다.
ARC700
표준 멀티플라이어 블록이 있는 ARC700 CPU에 맞게 조정합니다.
ARC700-xmac
XMAC 블록이 있는 ARC700 CPU에 맞게 조정합니다.
아크725D
ARC725D CPU에 맞게 조정합니다.
아크750D
ARC750D CPU에 맞게 조정합니다.
-다중 비용=NUM
곱하기 명령어에 대해 가정하는 비용, 4 일반 명령과 동일합니다.
-munalign-prob-임계값=확률
분기 정렬 해제에 대한 확률 임계값을 설정합니다. 튜닝할 때 ARC700 and
속도 최적화, 채워진 지연 슬롯이 없는 분기는 바람직하게 방출됩니다.
프로파일링에 분기의 확률이 표시되지 않는 한 정렬되지 않고 길다.
복용은 아래에 있습니다 확률. 기본값은 (REG_BR_PROB_BASE/2), 즉 5000입니다.
다음 옵션은 이전 버전과의 호환성을 위해 유지되지만 이제 더 이상 사용되지 않습니다.
다음 릴리스에서 제거됩니다.
- 마고넛
구식 FPX.
-mbig-엔디안
-EB 빅 엔디안 대상에 대한 코드를 컴파일합니다. 이러한 옵션의 사용은 이제 더 이상 사용되지 않습니다. 사용자
빅 엔디안 코드를 원하는 경우 "arceb-elf32" 및 "arceb-linux-uclibc" 대상을 사용해야 합니다.
도구 체인을 빌드할 때 big-endian이 기본값입니다.
-미리틀 엔디안
-엘자 리틀 엔디안 대상에 대한 코드를 컴파일합니다. 이러한 옵션의 사용은 이제 더 이상 사용되지 않습니다.
리틀 엔디안 코드를 원하는 사용자는 "arc-elf32" 및 "arc-linux-uclibc"를 사용해야 합니다.
리틀 엔디안이 기본값인 도구 체인을 빌드할 때 대상입니다.
-mbarrel_shifter
로 교체되다 -mbarrel-shifter.
-mdpfp_compact
로 교체되다 -mdpfp-컴팩트.
-mdpfp_fast
로 교체되다 -mdpfp-빠른.
-mdsp_packa
로 교체되다 -mdsp-패카.
-mEA
로 교체되다 -메아.
-mmac_24
로 교체되다 -mmac-24.
-mmac_d16
로 교체되다 -mmac-d16.
-mspfp_compact
로 교체되다 -mspfp-컴팩트.
-mspfp_fast
로 교체되다 -mspfp-빠른.
-mtune=CPU
마케팅은: arc600, arc601, arc700 and arc700-xmac for CPU 대체된다 ARC600, ARC601,
ARC700 and ARC700-xmac 각기
-다중 비용=NUM
로 교체되다 -멀티코스트.
ARM 옵션
Bowman의 -m 옵션은 ARM 포트에 대해 정의됩니다.
-마비=name
지정된 ABI에 대한 코드를 생성합니다. 허용되는 값은 다음과 같습니다. apcs-gnu, atpcs, 앗싸,
aapcs-리눅스 and 으으으음.
-mapcs-프레임
ARM 프로시저 호출 표준을 준수하는 스택 프레임 생성
코드의 올바른 실행을 위해 꼭 필요한 것은 아니더라도 기능을 사용할 수 있습니다.
지정 -fomit 프레임 포인터 이 옵션을 사용하면 스택 프레임이
리프 함수에 대해 생성됩니다. 기본값은 -mno-apcs-프레임. 이 옵션은
더 이상 사용되지 않습니다.
-맵
이것은 동의어입니다 -mapcs-프레임 더 이상 사용되지 않습니다.
-mthumb-연동
ARM과 Thumb 명령어 세트 간의 호출을 지원하는 코드를 생성합니다.
이 옵션이 없으면 v5 이전 아키텍처에서 두 개의 명령어 세트를
하나의 프로그램 내에서 안정적으로 사용됩니다. 기본값은 -mno-thumb-연동, 약간부터
더 큰 코드가 생성될 때 -mthumb-연동 지정됩니다. AAPCS 구성에서
이 옵션은 의미가 없습니다.
-mno-sched-프롤로그
함수 프롤로그에서 명령어의 재정렬 또는 병합을 방지합니다.
함수 본문에 있는 지침이 있는 해당 지침. 이것은 모든
기능은 인식 가능한 일련의 명령으로 시작합니다(또는 실제로는
다른 기능 프롤로그의 작은 집합에서), 이 정보를 사용하여
실행 가능한 코드 내에서 함수의 시작 부분을 찾습니다. 기본값은
-msched-프롤로그.
-mfloat-abi=name
사용할 부동 소수점 ABI를 지정합니다. 허용되는 값은 다음과 같습니다. 부드러운, 소프트 FP and
하드.
지정 부드러운 GCC가 부동에 대한 라이브러리 호출을 포함하는 출력을 생성하도록 합니다.
포인트 작업. 소프트 FP 하드웨어 부동 소수점을 사용하여 코드 생성 가능
명령이지만 여전히 소프트 플로트 호출 규칙을 사용합니다. 하드 수
부동 소수점 명령어 생성 및 FPU 관련 호출 규칙을 사용합니다.
기본값은 특정 대상 구성에 따라 다릅니다. 하드 플로트
소프트 플로트 ABI는 링크와 호환되지 않습니다. 다음을 사용하여 전체 프로그램을 컴파일해야 합니다.
동일한 ABI 및 호환 가능한 라이브러리 세트와 연결됩니다.
-미리틀 엔디안
리틀 엔디안 모드에서 실행되는 프로세서에 대한 코드를 생성합니다. 에 대한 기본값입니다.
모든 표준 구성.
-mbig-엔디안
빅 엔디안 모드에서 실행되는 프로세서에 대한 코드를 생성합니다. 기본값은 컴파일하는 것입니다.
리틀 엔디안 프로세서용 코드.
-행진=name
대상 ARM 아키텍처의 이름을 지정합니다. GCC는 이 이름을 사용하여
어셈블리 코드를 생성할 때 어떤 종류의 명령어를 내보낼 수 있는지 결정합니다. 이것
옵션과 함께 또는 대신 사용할 수 있습니다. -mcpu = 옵션. 허용
이름은 다음과 같습니다. armv2, armv2a, armv3, armv3m, armv4, armv4t, armv5, armv5t, armv5e,
ARMV5TE, armv6, armv6j, armv6t2, armv6z, armv6zk, armv6-m, armv7, armv7-a, armv7-r,
armv7-m, armv7e-m, armv7ve, armv8-a, armv8-a+crc, 으으으음, iwmmxt2, ep9312.
-행진=armv7ve 가상화 확장 기능이 있는 armv7-아키텍처입니다.
-행진=armv8-a+crc ARMv8-A 아키텍처용 코드 생성 가능
선택적 CRC32 확장.
-march = 네이티브 컴파일러가 빌드 아키텍처를 자동 감지하도록 합니다.
컴퓨터. 현재 이 기능은 GNU/Linux에서만 지원되며 모든
아키텍처를 인정합니다. 자동 감지에 실패한 경우 옵션이 없습니다.
효과.
-mtune=name
이 옵션은 GCC가 조정해야 하는 대상 ARM 프로세서의 이름을 지정합니다.
코드의 성능. 일부 ARM 구현의 경우 더 나은 성능이 될 수 있습니다.
이 옵션을 사용하여 얻습니다. 허용되는 이름은 다음과 같습니다. arm2, arm250, arm3, arm6,
arm60, arm600, arm610, arm620, arm7, 팔7m, 팔7d, arm7dm, 암7디, arm7dmi, arm70,
arm700, 암700i, arm710, 팔710c, arm7100, arm720, arm7500, arm7500fe, arm7tdmi,
arm7tdmi-s, 팔710t, 팔720t, 팔740t, 강한 팔, 스트롱암110, 스트롱암1100,
스트롱암1110, arm8, arm810, arm9, 암9e, arm920, 팔920t, 팔922t, arm946e-s,
arm966e-s, arm968e-s, arm926ej-s, 팔940t, arm9tdmi, arm10tdmi, 팔1020t, arm1026ej-s,
암10e, 암1020e, 암1022e, arm1136j-s, arm1136jf-s, mpcore, mpcorenovfp, arm1156t2-s,
arm1156t2f-s, arm1176jz-s, arm1176jzf-s, 피질 -a5, 피질 -a7, 피질 -a8, 피질 -a9,
피질 -a12, 피질 -a15, 피질 -a53, 피질 -a57, 피질 -a72, 피질-r4, 피질-r4f,
피질-r5, 피질-r7, 피질-m7, 피질-m4, 피질-m3, 피질-m1, 피질-m0,
피질-m0plus, 피질-m1.작은 곱하기, 피질-m0.작은 곱하기,
cortex-m0plus.small 곱하기, 엑시노스-m1, 마블-pj4, 엑스스케일, 으으으음, iwmmxt2, ep9312,
fa526, fa626, fa606te, fa626te, fmp626, fa726te, xgene1.
또한 이 옵션은 GCC가 코드의 성능을 조정하도록 지정할 수 있습니다.
big.LITTLE 시스템용. 허용되는 이름은 다음과 같습니다. 피질-a15.피질-a7,
피질-a57.피질-a53, 피질-a72.피질-a53.
-mtune=일반-아치 GCC가 혼합에 대한 성능을 조정해야 함을 지정합니다
아키텍처 내의 프로세서 아치. 목표는 잘 실행되는 코드를 생성하는 것입니다.
현재 가장 널리 사용되는 프로세서, 일부 이점을 제공하는 최적화 간의 균형
범위의 CPU를 사용하고 다른 CPU의 성능 함정을 방지합니다. 의 효과
이 옵션은 CPU 모델이 왔다가 사라지면서 향후 GCC 버전에서 변경될 수 있습니다.
-mtune=네이티브 컴파일러가 빌드 컴퓨터의 CPU를 자동 감지하도록 합니다. ~에
현재 이 기능은 GNU/Linux에서만 지원되며 모든 아키텍처가 지원되는 것은 아닙니다.
인식. 자동 감지에 실패하면 옵션이 적용되지 않습니다.
-mcpu =name
대상 ARM 프로세서의 이름을 지정합니다. GCC는 이 이름을 사용하여
대상 ARM 아키텍처의 이름( -XNUMX 월) 및 ARM 프로세서
성능을 위해 조정할 유형(에 의해 지정된 것처럼 -mtune). 이 옵션이 있는 곳
와 함께 사용됩니다 -XNUMX 월 or -mtune, 해당 옵션이
이 옵션의 적절한 부분.
이 옵션에 허용되는 이름은 다음과 같습니다. -mtune.
-mcpu=일반-아치 도 허용되며 다음과 동일합니다. -행진=아치
-mtune=일반-아치. 참조 -mtune
-mcpu=네이티브 컴파일러가 빌드 컴퓨터의 CPU를 자동 감지하도록 합니다. ~에
현재 이 기능은 GNU/Linux에서만 지원되며 모든 아키텍처가 지원되는 것은 아닙니다.
인식. 자동 감지에 실패하면 옵션이 적용되지 않습니다.
-mfpu=name
이것은 어떤 부동 소수점 하드웨어(또는 하드웨어 에뮬레이션)를 사용할 수 있는지 지정합니다.
목표. 허용되는 이름은 다음과 같습니다. 가상현실, vfpv3, vfpv3-fp16, vfpv3-d16, vfpv3-d16-fp16,
vfpv3xd, vfpv3xd-fp16, 네온, 네온 fp16, vfpv4, vfpv4-d16, fpv4-sp-d16, 네온 vfpv4,
fpv5-d16, fpv5-sp-d16, fp-armv8, 네온 fp-armv8및 암호화-네온-fp-armv8.
If -msoft-float 부동 소수점 값의 형식을 지정합니다.
선택한 부동 소수점 하드웨어에 NEON 확장이 포함된 경우(예: -mfpu=네온),
부동 소수점 연산은 GCC의 자동 벡터화 패스에 의해 생성되지 않습니다.
...을 제외하면 -재미있는 수학 최적화 도 지정됩니다. NEON 하드웨어 때문입니다.
부동 소수점 산술에 대한 IEEE 754 표준을 완전히 구현하지 않습니다(in
특정 비정규 값은 XNUMX으로 처리됨), 따라서 NEON 명령어를 사용하면
정밀도의 손실로 이어집니다.
-mfp16 형식=name
"__fp16" 반정밀도 부동 소수점 유형의 형식을 지정합니다. 허용
이름은 없음, 예및 대안; 기본값은 없음, 이 경우 "__fp16"
유형이 정의되지 않았습니다.
-m구조-크기-경계=n
모든 구조 및 공용체의 크기는 다음 수의 배수로 반올림됩니다.
이 옵션에 의해 설정되는 비트. 허용되는 값은 8, 32 및 64입니다. 기본값은
도구 모음마다 다릅니다. COFF 대상 도구 체인의 경우 기본값은
8. 64 값은 기본 ABI가 지원하는 경우에만 허용됩니다.
더 큰 수를 지정하면 더 빠르고 효율적인 코드를 생성할 수 있지만
프로그램의 크기를 늘립니다. 다른 값은 잠재적으로 호환되지 않습니다.
하나의 값으로 컴파일된 코드는 반드시 코드 또는 라이브러리와 함께 작동할 것으로 기대할 수 없습니다.
구조체 또는 공용체를 사용하여 정보를 교환하는 경우 다른 값으로 컴파일됩니다.
- mabort-on-noreturn
"noreturn" 함수의 끝에서 "abort" 함수에 대한 호출을 생성합니다. 그것은이다
함수가 반환을 시도하면 실행됩니다.
-mlong-통화
-mno-long-통화
컴파일러에게 먼저 주소를 로드하여 함수 호출을 수행하도록 지시합니다.
함수를 레지스터에 넣은 다음 이 레지스터에서 서브루틴 호출을 수행합니다. 이것
대상 기능이 64MB 주소 지정 외부에 있는 경우 스위치가 필요합니다.
서브루틴 호출 명령의 오프셋 기반 버전 범위.
이 스위치가 활성화된 경우에도 모든 함수 호출이 긴 호출로 바뀌는 것은 아닙니다.
휴리스틱은 정적 함수, "short_call"이 있는 함수
속성, "#pragma no_long_calls" 지시문 범위 내에 있는 함수,
현재 정의가 이미 컴파일된 함수
컴파일 단위는 긴 호출로 바뀌지 않습니다. 이 규칙의 예외는 다음과 같습니다.
약한 함수 정의, "long_call" 속성 또는 "섹션"이 있는 함수
속성 및 "#pragma long_calls" 지시문 범위 내에 있는 함수
항상 긴 통화로 바뀝니다.
이 기능은 기본적으로 활성화되어 있지 않습니다. 지정 -mno-long-통화 복원
"#pragma" 범위 내에서 함수 호출을 배치하는 것과 마찬가지로 기본 동작
long_calls_off" 지시어. 이러한 스위치는 컴파일러가
함수 포인터를 통해 함수 호출을 처리하는 코드를 생성합니다.
-msingle-pic-base
PIC 주소 지정에 사용되는 레지스터를 로드하는 대신 읽기 전용으로 처리하십시오.
각 기능에 대한 프롤로그. 런타임 시스템은 이것을 초기화할 책임이 있습니다.
실행이 시작되기 전에 적절한 값으로 등록하십시오.
-mpic-레지스터=등록 번호
PIC 주소 지정에 사용할 레지스터를 지정합니다. 표준 PIC 기본 케이스의 경우
기본값은 컴파일러에 의해 결정된 적절한 레지스터입니다. 단일 PIC 기본 케이스의 경우
기본값은 R9 대상이 EABI 기반이거나 스택 검사가 활성화된 경우, 그렇지 않으면
기본값은 R10.
-mpic-데이터-텍스트 상대
각 데이터 세그먼트는 로드 시 텍스트 세그먼트에 상대적이라고 가정합니다. 그러므로,
PC 기준 작업을 사용하여 데이터 주소 지정을 허용합니다. 이 옵션은 기본적으로 켜져 있습니다.
VxWorks RTP 이외의 대상용.
-mpoke 함수 이름
함수 바로 앞에 있는 텍스트 섹션에 각 함수의 이름을 씁니다.
프롤로그. 생성된 코드는 다음과 유사합니다.
t0
.ascii "arm_poke_function_name", 0
.맞추다
t1
.단어 0xff000000 + (t1 - t0)
arm_poke_function_name
이동 IP, SP
stmfd sp!, {fp, ip, lr, pc}
서브 FPS, IP, #4
스택 역추적을 수행할 때 코드는 "fp +
0". 추적 기능이 "pc - 12" 위치를 찾고 상위 8비트는
설정하면 바로 앞에 함수 이름이 포함되어 있다는 것을 알 수 있습니다.
위치 및 길이는 "((pc[-3]) & 0xff000000)"입니다.
-엄지손가락
-마름
ARM 및 Thumb 상태에서 실행되는 코드 생성 중에서 선택합니다. 기본값
대부분의 구성은 ARM 상태에서 실행되는 코드를 생성하는 것이지만 기본값은
다음으로 GCC를 구성하여 변경할 수 있습니다. --with-모드=상태 옵션을 구성합니다.
-mtpcs-프레임
Thumb 프로시저 호출 표준을 준수하는 스택 프레임 생성
리프가 아닌 모든 함수. (리프 함수는 다른 함수를 호출하지 않는 함수입니다.
기능.) 기본값은 -mno-tpcs-프레임.
-mtpcs-리프 프레임
Thumb 프로시저 호출 표준을 준수하는 스택 프레임 생성
모든 잎 기능. (리프 함수는 다른 함수를 호출하지 않는 함수입니다.)
디폴트는 -mno-apcs-리프 프레임.
-mcallee-슈퍼 인터워킹
컴파일 중인 파일에서 외부에서 볼 수 있는 모든 함수에 ARM 명령어를 제공합니다.
나머지 기능을 실행하기 전에 Thumb 모드로 전환하는 헤더를 설정하십시오.
이렇게 하면 이러한 함수가 비인터워킹 코드에서 호출될 수 있습니다. 이 옵션은
인터워킹이 기본적으로 활성화되어 있기 때문에 AAPCS 구성에서는 유효하지 않습니다.
-mcaller-슈퍼 인터워킹
함수 포인터(가상 함수 포함)를 통한 호출이 올바르게 실행되도록 허용
대상 코드가 인터워킹을 위해 컴파일되었는지 여부에 관계없이.
이 옵션이 있으면 함수 포인터를 실행하는 비용에 약간의 오버헤드가 있습니다.
사용 가능. 이 옵션은 AAPCS 구성에서 유효하지 않습니다.
기본적으로 활성화되어 있습니다.
-mtp=name
스레드 로컬 스토리지 포인터에 대한 액세스 모델을 지정하십시오. 유효한 모델은
부드러운, "__aeabi_read_tp"에 대한 호출을 생성합니다. cp15, 스레드를 가져옵니다.
"cp15"에서 직접 포인터(arm6k 아키텍처에서 지원됨) 및 자동, 그
선택한 프로세서에 가장 적합한 방법을 사용합니다. 기본 설정은
자동.
-mtls-방언=방언
스레드 로컬 저장소에 액세스하는 데 사용할 언어를 지정합니다. 둘 방언S는
지원 ---암소 비슷한 일종의 영양 and gnu2. 그만큼 암소 비슷한 일종의 영양 방언은 원래 GNU 체계를 선택합니다.
로컬 및 글로벌 동적 TLS 모델을 지원합니다. NS gnu2 방언은 GNU를 선택합니다
공유 라이브러리에 더 나은 성능을 제공하는 설명자 체계. GNU
설명자 체계는 원래 체계와 호환되지만 새 체계가 필요합니다.
어셈블러, 링커 및 라이브러리 지원. 초기 및 로컬 실행 TLS 모델은 다음과 같습니다.
이 옵션의 영향을 받지 않으며 항상 원래 구성표를 사용합니다.
-mword-재배치
단어 크기 값(즉, R_ARM_ABS32)에 대해서만 절대 재배치를 생성합니다. 이것은
런타임 로더가 부과하는 대상(uClinux, SymbianOS)에서 기본적으로 활성화됨
이 제한, 그리고 언제 -fpic or -fPIC 이 지정됩니다.
-mfix-cortex-m3-ldrd
일부 Cortex-M3 코어는 "ldrd" 명령이
중복 대상 및 기본 레지스터가 사용됩니다. 이 옵션은 생성을 방지합니다.
이 지침. 이 옵션은 다음과 같은 경우 기본적으로 활성화됩니다. -mcpu=피질-m3 is
지정되었습니다.
-munaligned 액세스
-mno-정렬되지 않은-액세스
주소에서 16비트 및 32비트 값 읽기 및 쓰기 활성화(또는 비활성화)
16비트 또는 32비트로 정렬되지 않습니다. 기본적으로 정렬되지 않은 액세스는 모든 사용자에 대해 비활성화됩니다.
ARMv6 이전 및 모든 ARMv6-M 아키텍처에서 지원되며 다른 모든 아키텍처에서 활성화됩니다. 만약에
정렬되지 않은 액세스가 활성화되지 않은 경우 패킹된 데이터 구조의 단어에 액세스
한 번에 바이트.
ARM 속성 "Tag_CPU_unaligned_access"는 생성된 오브젝트 파일에서 다음으로 설정됩니다.
이 옵션의 설정에 따라 true 또는 false입니다. 정렬되지 않은 액세스인 경우
활성화되면 전처리기 기호 "__ARM_FEATURE_UNALIGNED"도 정의됩니다.
-64비트용 mneon
Neon을 사용하여 스칼라 64비트 작업을 처리할 수 있습니다. 기본적으로 비활성화되어 있습니다.
코어 레지스터에서 네온으로 데이터를 이동하는 비용이 높기 때문입니다.
-mslow 플래시 데이터
플래시에서 데이터를 로드하는 것이 명령어를 가져오는 것보다 느리다고 가정합니다. 따라서 문자 그대로
더 나은 성능을 위해 부하가 최소화됩니다. 이 옵션은 다음 경우에만 지원됩니다.
ARMv7 M-profile용으로 컴파일하고 기본적으로 꺼져 있습니다.
-masm 구문 통합
인라인 어셈블러가 통합 asm 구문을 사용하고 있다고 가정합니다. 기본값은 현재 꺼져 있습니다.
이는 분할된 구문을 의미합니다. 현재 이 옵션은 Thumb1 및
ARM 상태 및 Thumb2에는 영향을 주지 않습니다. 그러나 이는 향후 릴리스에서 변경될 수 있습니다.
GCC. 분할 구문은 더 이상 사용되지 않는 것으로 간주되어야 합니다.
-mrestrict-it
ARMv8의 규칙을 준수하도록 IT 블록 생성을 제한합니다. IT 블록은
선택된 명령어 세트에서 단일 16비트 명령어만 포함합니다. 이것
옵션은 ARMv8 Thumb 모드에서 기본적으로 켜져 있습니다.
-mprint-조정-정보
CPU 튜닝 정보를 어셈블러 파일에 주석으로 인쇄합니다. 사용하는 옵션입니다
컴파일러의 회귀 테스트용으로만 사용되며 일반적인 사용을 위한 것이 아닙니다.
컴파일 코드. 이 옵션은 기본적으로 비활성화되어 있습니다.
AVR 옵션
다음 옵션은 AVR 구현에 대해 정의됩니다.
-mmcu=MCU
Atmel AVR ISA(명령 세트 아키텍처) 또는 MCU 유형을 지정합니다.
이 옵션의 기본값은@tie{}입니다.avr2.
GCC는 다음 AVR 장치 및 ISA를 지원합니다.
"avr2"
최대 8@tie{}KiB의 프로그램 메모리가 있는 "클래식" 기기. MCU@tie{}= "attiny22",
"attiny26", "at90c8534", "at90s2313", "at90s2323", "at90s2333", "at90s2343",
"at90s4414", "at90s4433", "at90s4434", "at90s8515", "at90s8535".
"avr25"
최대 8@tie{}KiB의 프로그램 메모리와 "MOVW"가 있는 "클래식" 기기
교수. MCU@tie{}= "ata5272", "ata6616c", "attiny13", "attiny13a",
"attiny2313", "attiny2313a", "attiny24", "attiny24a", "attiny25", "attiny261",
"attiny261a", "attiny43u", "attiny4313", "attiny44", "attiny44a", "attiny441",
"attiny45", "attiny461", "attiny461a", "attiny48", "attiny828", "attiny84",
"attiny84a", "attiny841", "attiny85", "attiny861", "attiny861a", "attiny87",
"attiny88", "at86rf401".
"avr3"
프로그램 메모리가 16@tie{}KiB에서 최대 64@tie{}KiB인 "클래식" 기기.
MCU@tie{}= "at43usb355", "at76c711".
"avr31"
128@tie{}KiB의 프로그램 메모리가 있는 "클래식" 기기. MCU@tie{}= "atmega103",
"at43usb320".
"avr35"
16@tie{}KiB에서 최대 64@tie{}KiB의 프로그램 메모리와
"MOVW" 명령. MCU@tie{}= "ata5505", "ata6617c", "ata664251",
"atmega16u2", "atmega32u2", "atmega8u2", "attiny1634", "attiny167", "at90usb162",
"at90usb82".
"avr4"
최대 8@tie{}KiB의 프로그램 메모리가 있는 "향상된" 기기. MCU@tie{}= "ata6285",
"ata6286", "ata6289", "ata6612c", "atmega48", "atmega48a", "atmega48p",
"atmega48pa", "atmega8", "atmega8a", "atmega8hva", "atmega8515", "atmega8535",
"atmega88", "atmega88a", "atmega88p", "atmega88pa", "at90pwm1", "at90pwm2",
"at90pwm2b", "at90pwm3", "at90pwm3b", "at90pwm81".
"avr5"
프로그램 메모리가 16@tie{}KiB에서 최대 64@tie{}KiB인 "향상된" 기기.
MCU@tie{}= "ata5702m322", "ata5782", "ata5790", "ata5790n", "ata5795", "ata5831",
"ata6613c", "ata6614q", "atmega16", "atmega16a", "atmega16hva", "atmega16hva2",
"atmega16hvb", "atmega16hvbrevb", "atmega16m1", "atmega16u4", "atmega161",
"atmega162", "atmega163", "atmega164a", "atmega164p", "atmega164pa", "atmega165",
"atmega165a", "atmega165p", "atmega165pa", "atmega168", "atmega168a",
"atmega168p", "atmega168pa", "atmega169", "atmega169a", "atmega169p",
"atmega169pa", "atmega32", "atmega32a", "atmega32c1", "atmega32hvb",
"atmega32hvbrevb", "atmega32m1", "atmega32u4", "atmega32u6", "atmega323",
"atmega324a", "atmega324p", "atmega324pa", "atmega325", "atmega325a",
"atmega325p", "atmega325pa", "atmega3250", "atmega3250a", "atmega3250p",
"atmega3250pa", "atmega328", "atmega328p", "atmega329", "atmega329a",
"atmega329p", "atmega329pa", "atmega3290", "atmega3290a", "atmega3290p",
"atmega3290pa", "atmega406", "atmega64", "atmega64a", "atmega64c1", "atmega64hve",
"atmega64hve2", "atmega64m1", "atmega64rfr2", "atmega640", "atmega644",
"atmega644a", "atmega644p", "atmega644pa", "atmega644rfr2", "atmega645",
"atmega645a", "atmega645p", "atmega6450", "atmega6450a", "atmega6450p",
"atmega649", "atmega649a", "atmega649p", "atmega6490", "atmega6490a",
"atmega6490p", "at90can32", "at90can64", "at90pwm161", "at90pwm216", "at90pwm316",
"at90scr100", "at90usb646", "at90usb647", "at94k", "m3000".
"avr51"
128@tie{}KiB의 프로그램 메모리가 있는 "향상된" 기기. MCU@tie{}= "atmega128",
"atmega128a", "atmega128rfa1", "atmega128rfr2", "atmega1280", "atmega1281",
"atmega1284", "atmega1284p", "atmega1284rfr2", "at90can128", "at90usb1286",
"at90usb1287".
"avr6"
3바이트 PC가 있는 "향상된" 기기(예: 128@tie{}KiB 이상의 프로그램 포함)
메모리. MCU@tie{}= "atmega256rfr2", "atmega2560", "atmega2561", "atmega2564rfr2".
"avrxmega2"
8@tie{}KiB 이상 및 최대 64@tie{}KiB의 프로그램 메모리가 있는 "XMEGA" 기기.
MCU@tie{}= "atxmega16a4", "atxmega16a4u", "atxmega16c4", "atxmega16d4",
"atxmega16e5", "atxmega32a4", "atxmega32a4u", "atxmega32c3", "atxmega32c4",
"atxmega32d3", "atxmega32d4", "atxmega32e5", "atxmega8e5".
"avrxmega4"
64@tie{}KiB 이상 및 최대 128@tie{}KiB 프로그램의 "XMEGA" 기기
메모리. MCU@tie{}= "atxmega64a3", "atxmega64a3u", "atxmega64a4u", "atxmega64b1",
"atxmega64b3", "atxmega64c3", "atxmega64d3", "atxmega64d4".
"avrxmega5"
64@tie{}KiB 이상 및 최대 128@tie{}KiB 프로그램의 "XMEGA" 기기
메모리 및 64@tie{}KiB 이상의 RAM. MCU@tie{}= "atxmega64a1",
"atxmega64a1u".
"avrxmega6"
128@tie{}KiB 이상의 프로그램 메모리가 있는 "XMEGA" 기기. MCU@타이{}=
"atxmega128a3", "atxmega128a3u", "atxmega128b1", "atxmega128b3", "atxmega128c3",
"atxmega128d3", "atxmega128d4", "atxmega192a3", "atxmega192a3u", "atxmega192c3",
"atxmega192d3", "atxmega256a3", "atxmega256a3b", "atxmega256a3bu",
"atxmega256a3u", "atxmega256c3", "atxmega256d3", "atxmega384c3", "atxmega384d3".
"avrxmega7"
128@tie{}KiB 이상의 프로그램 메모리와 그 이상의 "XMEGA" 기기
64@tie{}KiB의 RAM. MCU@tie{}= "atxmega128a1", "atxmega128a1u", "atxmega128a4u".
"아브르티니"
"TINY" 프로그램 메모리가 512@tie{}B에서 최대 4@tie{}KiB인 초소형 코어 기기.
MCU@tie{}= "attiny10", "attiny20", "attiny4", "attiny40", "attiny5", "attiny9".
"avr1"
이 ISA는 최소 AVR 코어로 구현되며 어셈블러에서만 지원됩니다.
MCU@tie{}= "attiny11", "attiny12", "attiny15", "attiny28", "at90s1200".
-maccumulate-args
나가는 함수 인수를 누적하고 필요한 스택 공간을 획득/해제합니다.
함수 프롤로그/에필로그에서 한 번 나가는 함수 인수. 이 옵션이 없으면
나가는 인수는 함수를 호출하기 전에 푸시되고 나중에 팝됩니다.
함수 호출 후 인수를 팝하면 AVR에서 비용이 많이 들 수 있으므로
스택 공간을 누적하면 인수가 필요하기 때문에 실행 파일이 더 작아질 수 있습니다.
이러한 함수 호출 후에 스택에서 제거되지 않습니다.
이 옵션은 여러 호출을 수행하는 함수의 코드 크기를 줄일 수 있습니다
printf와 같은 함수에 대한 호출과 같이 스택에서 인수를 가져오는 함수.
-mbranch 비용=비용
조건부 분기 명령어의 분기 비용을 다음으로 설정합니다. 비용. 합리적인 가치
for 비용 음이 아닌 작은 정수입니다. 기본 분기 비용은 0입니다.
-mcall-프롤로그
기능 프롤로그/에필로그는 적절한 서브루틴에 대한 호출로 확장됩니다. 암호
크기가 더 작습니다.
-민트8
"int"가 8비트 정수라고 가정합니다. 이것은 모든 유형의 크기에 영향을 미칩니다. "char"는 1입니다.
byte, "int"는 1바이트, "long"은 2바이트, "long long"은 4바이트입니다. 제발
이 옵션은 C 표준을 준수하지 않지만 결과적으로
코드 크기.
-mn-플래시=NUM
플래시 메모리의 크기가 다음과 같다고 가정합니다. NUM 배 64@tie{}KiB.
-mno 인터럽트
생성된 코드는 하드웨어 인터럽트와 호환되지 않습니다. 코드 크기가 더 작습니다.
-mrelax
"CALL" resp를 교체해 보십시오. 짧은 "RCALL" resp에 의한 "JMP" 명령. "RJMP"
해당되는 경우 지시. 환경 -mrelax 그냥 추가 --mlink-휴식 옵션을
어셈블러의 명령줄과 --안심하다 옵션을 링커의 명령줄에 추가합니다.
점프 오프셋은 이전에 알려지지 않았기 때문에 링커에서 점프 완화를 수행합니다.
코드가 위치합니다. 따라서 컴파일러가 생성한 어셈블러 코드는 동일하며,
그러나 실행 파일의 명령어는 어셈블러의 명령어와 다를 수 있습니다.
암호.
링커 스텁이 필요한 경우 이완을 켜야 합니다. "EIND" 섹션을 참조하고
아래의 링커 스텁.
-mmw
장치가 읽기-수정-쓰기 명령어 "XCH", "LAC", "LAS"를 지원한다고 가정합니다.
및 "LAT".
-msp8
스택 포인터 레지스터를 8비트 레지스터로 취급합니다. 즉, 상위 바이트를 가정합니다.
스택 포인터는 XNUMX입니다. 일반적으로 이 옵션은 수동으로 설정할 필요가 없습니다.
이 옵션은 컴파일러에서 내부적으로 멀티 라이브러리를 선택하고 빌드하는 데 사용됩니다.
아키텍처 "avr2" 및 "avr25". 이러한 아키텍처는 장치를 포함하거나 포함하지 않고 혼합합니다.
"SPH". 이외의 설정의 경우 -mmcu=avr2 or -mmcu=avr25 컴파일러 드라이버는
또는 컴파일러 고유의 명령줄에서 이 옵션을 제거합니다.
그런 다음 장치 또는 아키텍처에 8비트 스택 포인터가 있고 "SPH"가 없는지 확인합니다.
등록 여부.
-mstrict-X
하드웨어에서 제안하는 방식으로 주소 레지스터 "X"를 사용합니다. 이것은 "X"가
간접, 사후 증가 또는 사전 감소 주소 지정에만 사용됩니다.
이 옵션이 없으면 "X" 레지스터는 "Y" 또는 "Z"와 같은 방식으로 사용될 수 있습니다.
그런 다음 추가 지침에 의해 에뮬레이트됩니다. 예를 들어,
레지스터에 대해 음이 아닌 작은 "const < 64"를 사용하여 "X+const" 주소 지정 Rn is
로 수행
adw r26, const ; X += 상수
ld , NS ; = *X
sbiw r26, const ; X -= 상수
-mtiny 스택
스택 포인터의 하위 8@tie{}비트만 변경하세요.
-nodevicelib
AVR-LibC의 장치 특정 라이브러리 "libdev.a"에 대해 링크하지 마십시오.
-Waddr 공간 변환
결과 주소가 다음과 같은 경우 주소 공간 간의 변환에 대해 경고합니다.
공간은 들어오는 주소 공간에 포함되지 않습니다.
"EIND" 및 128Ki 바이트 이상의 플래시가 있는 장치
구현의 포인터는 16@tie{}비트 너비입니다. 함수 또는 레이블의 주소
간접 점프 및 호출이 모든 코드를 대상으로 할 수 있도록 워드 주소로 표시됩니다.
64@tie{}Ki 단어 범위의 주소.
128@tie{}Ki 바이트 이상의 기기에서 간접 점프를 용이하게 하기 위해
프로그램 메모리 공간에는 "EIND"라는 특수 기능 레지스터가 있습니다.
"EICAL" 또는 "EIJMP" 명령어가 다음과 같을 때 대상 주소의 가장 중요한 부분
익숙한.
이러한 장치에 대한 간접 점프 및 호출은 컴파일러에 의해 다음과 같이 처리되며
몇 가지 제한 사항이 있습니다.
* 컴파일러는 "EIND"를 설정하지 않습니다.
* 컴파일러는 "EICAL"/"EIJMP" 명령어에서 암시적으로 "EIND"를 사용하거나 다음을 읽을 수 있습니다.
"RET"를 통해 간접 호출/점프를 에뮬레이트하기 위해 직접 "EIND"
교수.
* 컴파일러는 "EIND"가 시작 코드 중 또는 실행 중 변경되지 않는다고 가정합니다.
애플리케이션. 특히 "EIND"는 함수나 인터럽트에 저장/복구되지 않습니다.
서비스 루틴 프롤로그/에필로그.
* 함수 및 계산된 goto에 대한 간접 호출의 경우 링커는 다음을 생성합니다. 스텁. 스텁
점프 패드라고도 합니다 트램폴린. 따라서 간접 호출/점프
그런 스텁. 스텁에는 원하는 주소로의 직접 점프가 포함됩니다.
* 링커가 스텁을 올바르게 생성하려면 링커 이완을 켜야 합니다.
모든 상황에서. 컴파일러 옵션 참조 -mrelax 그리고 링커 옵션 --안심하다.
링커가 스텁을 생성해야 하지만 중단되는 경우가 있습니다.
휴식 없이 유용한 오류 메시지 없이.
* 기본 링커 스크립트는 "EIND = 0"인 코드에 대해 정렬됩니다. 코드가 가정되는 경우
"EIND != 0" 설정에서 작동하려면 사용자 지정 링커 스크립트를 순서대로 사용해야 합니다.
이름이 ".trampolines"로 시작하는 섹션을 세그먼트에 배치하려면
"EIND"를 가리킵니다.
* libgcc의 시작 코드는 "EIND"를 설정하지 않습니다. 시작 코드는 혼합입니다.
libgcc 및 AVR-LibC의 코드. "EIND"에 대한 AVR-LibC의 영향에 대해서는 AVR-
LibC 사용자 매뉴얼("http://nongnu.org/avr-libc/user-manual/").
* 사용자별 시작 코드가 "EIND"를 일찍 설정하는 것은 합법적입니다. 예를 들어
".init3" 섹션에 있는 초기화 코드 수단. 이러한 코드는 이전에 실행됩니다.
RAM을 초기화하고 생성자를 호출하는 일반적인 시작 코드
"EIND"를 벡터 테이블이 있는 세그먼트로 설정하는 AVR-LibC의 시작 코드
위치하고 있습니다.
#포함하다
정적 공극
__attribute__((섹션(".init3"), 알몸, 사용, no_instrument_function))
init3_set_eind(무효)
{
__asm 휘발성("ldi r24,pm_hh8(__trampolines_start)\n\t"
"%i0,r24 출력" :: "n" (&EIND) : "r24","메모리");
}
"__trampolines_start" 기호는 링커 스크립트에 정의되어 있습니다.
* 다음 두 가지 조건이 충족되면 링커에 의해 스텁이 자동으로 생성됩니다.
만난 :
-
( 생성 스텁) 다음과 같이:
LDI r24, lo8(gs( ))
LDI r25, hi8(gs( ))
-
외부 스텁이 있는 세그먼트입니다.
* 컴파일러는 다음과 같은 상황에서 코드 레이블에 대해 이러한 "gs" 수정자를 내보냅니다.
-
-
- -mcall-프롤로그>
명령줄 옵션.
-
지정할 수 있는 테이블 -fno-점프 테이블 명령줄 옵션.
-
-
* 이와 같이 기호가 아닌 주소로 점프하는 것은 지원 지원 :
정수 메인(무효)
{
/* 워드 주소 0x2에서 함수 호출 */
반환((int(*)(무효)) 0x2)();
}
대신, 스텁이 설정되어야 합니다. 즉, 함수는 기호를 통해 호출되어야 합니다.
(예시에서 "func_4"):
정수 메인(무효)
{
extern int func_4(무효);
/* 바이트 주소 0x4에서 함수 호출 */
반환 func_4();
}
응용 프로그램은 다음과 연결됩니다. -Wl,--defsym, func_4=0x4. 또는 "func_4"
링커 스크립트에서 정의할 수 있습니다.
"RAMPD", "RAMPX", "RAMPY" 및 "RAMPZ" 특수 기능 레지스터 처리
일부 AVR 기기는 액세스할 수 있는 64@tie{}KiB 범위보다 큰 메모리를 지원합니다.
16비트 포인터로. 이 64@tie{}KiB 범위 밖의 메모리 위치에 액세스하려면
"RAMP" 레지스터의 내용은 주소의 상위 부분으로 사용됩니다. "X", "Y", "Z"
주소 레지스터는 "RAMPX", "RAMPY", "RAMPZ" 특수 기능과 연결됩니다.
넓은 주소를 얻으려면 각각 등록하십시오. 마찬가지로 "RAMPD"는 다음과 함께 사용됩니다.
직접 주소 지정.
* 시작 코드는 "RAMP" 특수 기능 레지스터를 XNUMX으로 초기화합니다.
* 만약 AVR 이름 주소 명명된 공간 주소 공간 일반 또는 "__flash"가 아닌 것은
사용하면 작업 전에 필요에 따라 "RAMPZ"가 설정됩니다.
* 기기가 64@tie{}KiB보다 큰 RAM을 지원하고 컴파일러를 변경해야 하는 경우
"RAMPZ"는 작업을 수행하고 "RAMPZ"는 작업 후에 XNUMX으로 재설정됩니다.
* 장치가 특정 "RAMP" 레지스터와 함께 제공되는 경우 ISR 프롤로그/에필로그
해당 SFR을 저장/복원하고 ISR 코드가
(암시적으로) 사용합니다.
* 64@tie{}KiB보다 큰 RAM은 AVR 대상용 GCC에서 지원하지 않습니다. 사용하는 경우
16비트 주소 범위 밖의 위치에서 읽고 변경하는 인라인 어셈블러
"RAMP" 레지스터 중 하나에 액세스한 후 이를 XNUMX으로 재설정해야 합니다.
AVR 내장 매크로
GCC는 사용자 코드가 존재 여부를 테스트할 수 있도록 여러 내장 매크로를 정의합니다.
기능의 부재. 다음 내장 매크로 중 거의 모든 것이 장치에서 추론됩니다.
기능에 의해 트리거됩니다. -mmcu= 명령줄 옵션.
더 많은 AVR 전용 내장 매크로는 다음을 참조하십시오. AVR 이름 주소 공간 and AVR 내장
기능.
"__AVR_ARCH__"
아키텍처를 식별하는 XNUMX진수로 해석되는 내장 매크로 및
에 따라 -mmcu=MCU 옵션. 가능한 값은 다음과 같습니다.
2, 25, 3, 31, 35, 4, 5, 51, 6
for MCU"avr2", "avr25", "avr3", "avr31", "avr35", "avr4", "avr5", "avr51", "avr6",
각각
100, 102, 104, 105, 106, 107
for MCU"avrtiny", "avrxmega2", "avrxmega4", "avrxmega5", "avrxmega6", "avrxmega7",
각기. 만약에 MCU 장치를 지정하면 이 내장 매크로가 그에 따라 설정됩니다. 을위한
예를 들어 -mmcu=atmega8 매크로는 4로 정의됩니다.
"__AVR_장치__"
환경 -mmcu=장치 장치의 이름을 반영하는 이 내장 매크로를 정의합니다. 을위한
예, -mmcu=atmega8 내장 매크로 "__AVR_ATmega8__"을 정의하고, -mmcu=attiny261a
"__AVR_ATtiny261A__" 등을 정의합니다.
내장 매크로의 이름은 "__AVR_장치__" 어디에 장치 이다
AVR 사용자 설명서에서와 같이 장치 이름. 차이점 장치 내장
매크로 및 장치 in -mmcu=장치 후자는 항상 소문자라는 것입니다.
If 장치 장치가 아니라 다음과 같은 핵심 아키텍처일 뿐입니다. avr51, 이 매크로는
한정된.
"__AVR_DEVICE_NAME__"
환경 -mmcu=장치 이 내장 매크로를 장치 이름으로 정의합니다. 예를 들어,
과 -mmcu=atmega8 매크로는 "atmega8"로 정의됩니다.
If 장치 장치가 아니라 다음과 같은 핵심 아키텍처일 뿐입니다. avr51, 이 매크로는
한정된.
"__AVR_XMEGA__"
장치/아키텍처는 XMEGA 장치 제품군에 속합니다.
"__AVR_HAVE_ELPM__"
장치에는 "ELPM" 명령이 있습니다.
"__AVR_HAVE_ELPMX__"
장치에는 "ELPM R엔,Z" 그리고 "ELPM R엔,Z+" 도움말을 참조하십시오.
"__AVR_HAVE_MOVW__"
장치에는 16비트 레지스터 레지스터 이동을 수행하기 위한 "MOVW" 명령이 있습니다.
"__AVR_HAVE_LPMX__"
장치에는 "LPM R엔,Z" 그리고 "LPM R엔,Z+" 도움말을 참조하십시오.
"__AVR_HAVE_MUL__"
장치에는 하드웨어 승수가 있습니다.
"__AVR_HAVE_JMP_CALL__"
장치에는 "JMP" 및 "CALL" 명령이 있습니다. 가 있는 장치의 경우입니다.
최소 16@tie{}KiB의 프로그램 메모리.
"__AVR_HAVE_EIJMP_EICALL__"
"__AVR_3_BYTE_PC__"
장치에는 "EIJMP" 및 "EICALL" 지침이 있습니다. 이것은 장치의 경우입니다.
128@tie{}KiB 이상의 프로그램 메모리. 이것은 또한 프로그램이
카운터(PC)의 너비는 3@tie{}바이트입니다.
"__AVR_2_BYTE_PC__"
프로그램 카운터(PC)는 2@tie{}바이트 너비입니다. 이것은 최대
128@tie{}KiB의 프로그램 메모리.
"__AVR_HAVE_8BIT_SP__"
"__AVR_HAVE_16BIT_SP__"
스택 포인터(SP) 레지스터는 다음과 같이 8비트 각각 16비트 레지스터로 처리됩니다.
컴파일러. 이러한 매크로의 정의는 다음의 영향을 받습니다. -mtiny 스택.
"__AVR_HAVE_SPH__"
"__AVR_SP8__"
장치에는 SPH(스택 포인터의 상위 부분) 특수 기능 레지스터가 있거나
각각 8비트 스택 포인터. 이러한 매크로의 정의는 다음에 의해 영향을 받습니다.
-mmcu= 의 경우 -mmcu=avr2 and -mmcu=avr25 또한 -msp8.
"__AVR_HAVE_RAMPD__"
"__AVR_HAVE_RAMPX__"
"__AVR_HAVE_RAMPY__"
"__AVR_HAVE_RAMPZ__"
장치에는 "RAMPD", "RAMPX", "RAMPY", "RAMPZ" 특수 기능 레지스터가 있습니다.
각각.
"__NO_INTERRUPTS__"
이 매크로는 -mno 인터럽트 명령줄 옵션.
"__AVR_ERRATA_SKIP__"
"__AVR_ERRATA_SKIP_JMP_CALL__"
일부 AVR 장치(AT90S8515, ATmega103)는 다음과 같은 이유로 32비트 명령어를 건너뛰면 안 됩니다.
하드웨어 오류. 건너뛰기 명령어는 "SBRS", "SBRC", "SBIS", "SBIC" 및 "CPSE"입니다.
두 번째 매크로는 "__AVR_HAVE_JMP_CALL__"도 설정된 경우에만 정의됩니다.
"__AVR_ISA_RMW__"
장치에는 읽기-수정-쓰기 명령(XCH, LAC, LAS 및 LAT)이 있습니다.
"__AVR_SFR_OFFSET__=오프셋"
"IN"과 같이 I/O 특수 기능 레지스터에 직접 주소를 지정할 수 있는 명령어,
"OUT", "SBI" 등은 명령에 의해 주소가 지정된 것처럼 다른 주소를 사용할 수 있습니다.
"LD" 또는 "STS"와 같은 액세스 RAM. 이 오프셋은 장치 아키텍처에 따라 다르며
각각의 I/O@tie{}주소를 얻기 위해 RAM 주소에서 빼야 합니다.
"__WITH_AVRLIBC__"
컴파일러는 AVR-Libc와 함께 사용하도록 구성됩니다. 참조 ---avrlibc 포함
옵션을 구성합니다.
블랙 핀 옵션
-mcpu =CPU[-후견]
대상 Blackfin 프로세서의 이름을 지정합니다. 현재, CPU 중 하나가 될 수 있습니다
bf512, bf514, bf516, bf518, bf522, bf523, bf524, bf525, bf526, bf527, bf531, bf532,
bf533, bf534, bf536, bf537, bf538, bf539, bf542, bf544, bf547, bf548, bf549, bf542m,
bf544m, bf547m, bf548m, bf549m, bf561, bf592.
선택적 후견 대상 Blackfin의 실리콘 버전을 지정합니다.
프로세서. 대상 실리콘 개정에 사용할 수 있는 모든 해결 방법이 활성화됩니다.
If 후견 is 없음, 해결 방법이 활성화되어 있지 않습니다. 만약에 후견 is 어떤모든
대상 프로세서에 대한 해결 방법이 활성화됩니다. "__SILICON_REVISION__" 매크로
는 주요 번호와 보조 번호를 나타내는 두 개의 XNUMX진수로 정의됩니다.
실리콘 수정. 만약에 후견 is 없음, "__SILICON_REVISION__"이(가) 정의되지 않았습니다.
If 후견 is 어떤, "__SILICON_REVISION__"은 0xffff로 정의됩니다. 이 경우
optional 후견 사용되지 않는 경우 GCC는 최신 알려진 실리콘 개정판을 가정합니다.
대상 Blackfin 프로세서.
GCC는 지정된 전처리기 매크로를 정의합니다. CPU. 에 대한 비핀 엘프 툴체인,
이 옵션은 libgloss가 제공하는 하드웨어 BSP가 다음과 같은 경우에 링크되도록 합니다. -msim is
주어지지 않았습니다.
이 옵션이 없으면 bf532 기본적으로 프로세서로 사용됩니다.
에 대한 지원을 참고하십시오. bf561 불완전하다. 을위한 bf561, 전처리기 매크로만
한정된.
-msim
프로그램이 시뮬레이터에서 실행되도록 지정합니다. 이로 인해 시뮬레이터
링크할 libgloss에서 제공하는 BSP. 이 옵션은 다음에만 적용됩니다. 비핀 엘프
도구 체인. 다음과 같은 특정 다른 옵션 -중간 공유 라이브러리 and -mfdpic, 암시하다
-msim.
-momit-리프 프레임 포인터
리프 함수에 대한 레지스터에 프레임 포인터를 유지하지 마십시오. 이것은 피한다
프레임 포인터를 저장, 설정 및 복원하고 추가 레지스터를 만드는 명령
리프 함수에서 사용할 수 있습니다. 옵션 -fomit 프레임 포인터 프레임을 제거
디버깅을 더 어렵게 만들 수 있는 모든 기능에 대한 포인터입니다.
-mspecld-이상
활성화되면 컴파일러는 생성된 코드에 다음이 포함되지 않도록 합니다.
점프 지시 후 추측 부하. 이 옵션을 사용하면
"__WORKAROUND_SPECULATIVE_LOADS"가 정의됩니다.
-mno-specld-이상
추측 로드가 발생하는 것을 방지하기 위해 추가 코드를 생성하지 마십시오.
-mcsync-이상
활성화되면 컴파일러는 생성된 코드에 CSYNC 또는
조건부 분기 이후에 SSYNC 명령이 너무 빨리 실행됩니다. 이 옵션을 사용하면
"__WORKAROUND_SPECULATIVE_SYNCS"가 정의됩니다.
-mno-csync-이상
CSYNC 또는 SSYNC 명령어도 발생하지 않도록 추가 코드를 생성하지 마십시오.
조건부 분기 직후.
-mlow-64k
활성화되면 컴파일러는 전체 지식을 자유롭게 활용할 수 있습니다.
프로그램은 메모리의 낮은 64k에 맞습니다.
-mno-low-64k
프로그램이 임의로 크다고 가정합니다. 이것이 기본값입니다.
-mstack-check-l1
uClinux에 의해 L1 스크래치패드 메모리에 배치된 정보를 사용하여 스택 검사 수행
핵심.
-중간 공유 라이브러리
라이브러리 ID 방식을 통해 공유 라이브러리를 지원하는 코드를 생성합니다. 이것은 허용
가상 메모리가 없는 환경에서 제자리 실행 및 공유 라이브러리용
관리. 이 옵션은 다음을 의미합니다. -fPIC. 와 비핀 엘프 대상, 이 옵션은
-msim.
-mno-id-공유 라이브러리
ID 기반 공유 라이브러리가 사용되고 있다고 가정하지 않는 코드를 생성합니다. 이것은
기본값.
-mleaf-id-공유 라이브러리
라이브러리 ID 방법을 통해 공유 라이브러리를 지원하는 코드를 생성하지만 다음을 가정합니다.
이 라이브러리 또는 실행 파일은 다른 ID 공유 라이브러리와 연결되지 않습니다.
이를 통해 컴파일러는 점프 및 호출에 더 빠른 코드를 사용할 수 있습니다.
-mno-leaf-id-공유 라이브러리
컴파일 중인 코드가 ID 공유 라이브러리에 대해 링크되지 않을 것이라고 가정하지 마십시오.
점프 및 호출 insns에 대해 더 느린 코드가 생성됩니다.
-mshared-library-id=n
컴파일 중인 ID 기반 공유 라이브러리의 식별 번호를 지정합니다.
값을 0으로 지정하면 더 간결한 코드가 생성됩니다. 다른 값 지정하기
현재 라이브러리에 그 수를 할당하지만 더 이상 공간 또는 시간이 아닙니다.
이 옵션을 생략하는 것보다 효율적입니다.
-msep-데이터
데이터 세그먼트가 메모리의 다른 영역에 위치할 수 있도록 하는 코드 생성
텍스트 세그먼트에서. 이것은 환경에서 실행을 허용합니다.
텍스트 섹션에 대한 재배치를 제거하여 가상 메모리 관리.
-mno-XNUMX월-데이터
데이터 세그먼트가 텍스트 세그먼트를 따른다고 가정하는 코드를 생성하십시오. 이것은
기본값.
-mlong-통화
-mno-long-통화
컴파일러에게 먼저 주소를 로드하여 함수 호출을 수행하도록 지시합니다.
함수를 레지스터에 넣은 다음 이 레지스터에서 서브루틴 호출을 수행합니다. 이것
대상 기능이 24비트 주소 지정 범위 밖에 있는 경우 스위치가 필요합니다.
서브루틴 호출 명령어의 오프셋 기반 버전.
이 기능은 기본적으로 활성화되어 있지 않습니다. 지정 -mno-long-통화 복원
기본 동작. 이러한 스위치는 컴파일러가 생성하는 방식에 영향을 미치지 않습니다.
함수 포인터를 통해 함수 호출을 처리하는 코드.
-mfast-fp
빠른 부동 소수점 라이브러리와 연결합니다. 이 라이브러리는 IEEE
NAN(Not-a-Number)에 대한 입력을 확인하기 위한 부동 소수점 표준 규칙
성능에 대한 관심.
-minline-plt
알려지지 않은 함수에 대한 함수 호출에서 PLT 항목 인라인 사용
로컬로 바인딩합니다. 없이는 아무런 효과가 없습니다. -mfdpic.
-m멀티코어
멀티코어 Blackfin 프로세서용 독립 실행형 애플리케이션을 구축하십시오. 이 옵션은
사용할 멀티코어를 지원하는 적절한 시작 파일 및 링크 스크립트를 정의하고
매크로 "__BFIN_MULTICORE". 와만 사용할 수 있습니다. -mcpu=bf561[-후견].
이 옵션은 다음과 함께 사용할 수 있습니다. -엠코리아 or -mcoreb, 하나의 응용 프로그램을 선택합니다.
코어당 프로그래밍 모델. 없이 -엠코리아 or -mcorebWalk Through California 프로그램,
단일 애플리케이션/듀얼 코어 프로그래밍 모델이 사용됩니다. 이 모델에서 주요
Core B의 기능 이름은 "coreb_main"으로 지정해야 합니다.
이 옵션을 사용하지 않으면 단일 코어 응용 프로그래밍 모델이 사용됩니다.
-엠코리아
one-application-per-를 사용할 때 BF561의 Core A에 대한 독립 실행형 응용 프로그램을 빌드합니다.
핵심 프로그래밍 모델. Core를 지원하기 위해 적절한 시작 파일과 링크 스크립트가 사용됩니다.
A, 매크로 "__BFIN_COREA"가 정의됩니다. 이 옵션은 다음에서만 사용할 수 있습니다.
~과 연계되어 -m멀티코어.
-mcoreb
one-application-per-
핵심 프로그래밍 모델. Core를 지원하기 위해 적절한 시작 파일과 링크 스크립트가 사용됩니다.
B, 매크로 "__BFIN_COREB"가 정의됩니다. 이 옵션을 사용하면 "coreb_main"
"main" 대신 사용해야 합니다. 이 옵션은 다음과 함께만 사용할 수 있습니다.
-m멀티코어.
-msdram
SDRAM용 독립 실행형 애플리케이션을 빌드합니다. 적절한 시작 파일과 링크 스크립트가 사용됩니다.
응용 프로그램을 SDRAM에 넣고 매크로 "__BFIN_SDRAM"이 정의됩니다. NS
로더는 애플리케이션을 로드하기 전에 SDRAM을 초기화해야 합니다.
-micplb
ICPLB가 런타임에 활성화되어 있다고 가정합니다. 이것은 특정 이상 현상에 영향을 미칩니다.
해결 방법. Linux 대상의 경우 기본값은 ICPLB가 활성화된 것으로 가정하는 것입니다. ~을위한
독립 실행형 응용 프로그램은 기본값이 꺼져 있습니다.
C6X 옵션
-행진=name
대상 아키텍처의 이름을 지정합니다. GCC는 이 이름을 사용하여
어셈블리 코드를 생성할 때 어떤 종류의 명령을 내보낼 수 있습니다. 허용
이름은 다음과 같습니다. 의 C62x, 의 C64x, c64x+, 의 C67x, c67x+, 의 C674x.
-mbig-엔디안
빅 엔디안 대상에 대한 코드를 생성합니다.
-미리틀 엔디안
리틀 엔디안 대상에 대한 코드를 생성합니다. 이것이 기본값입니다.
-msim
시뮬레이터에 적합한 시작 파일과 링커 스크립트를 선택하십시오.
-msdata=기본값
".neardata" 섹션에 작은 전역 및 정적 데이터를 넣습니다.
"B14"를 등록하십시오. 초기화되지 않은 작은 전역 및 정적 데이터를 ".bss" 섹션에 넣고,
".neardata" 섹션에 인접해 있습니다. 작은 읽기 전용 데이터를
".rodata" 섹션. 큰 데이터 조각에 사용되는 해당 섹션은
".fardata", ".far" 및 ".const".
-msdata=모두
작은 개체뿐만 아니라 모든 데이터를 작은 데이터용으로 예약된 섹션에 넣고,
액세스하려면 "B14" 레지스터에 상대적인 주소 지정을 사용하십시오.
-msdata=없음
작은 데이터를 위해 예약된 섹션을 사용하지 말고 절대 주소를 사용하여
모든 데이터에 액세스합니다. 초기화된 모든 전역 및 정적 데이터를 ".fardata"에 넣습니다.
섹션 및 ".far" 섹션의 초기화되지 않은 모든 데이터. 모든 상수 데이터를
".const" 섹션.
CRIS 옵션
이러한 옵션은 CRIS 포트에 대해 특별히 정의됩니다.
-행진=건축형
-mcpu =건축형
지정된 아키텍처에 대한 코드를 생성합니다. 에 대한 선택 건축형 are
v3, v8 and v10 각각 ETAX 4, ETAX 100 및 ETAX 100 LX용입니다. 기본값은 v0
기본값은 cris-axis-linux-gnu를 제외하고 v10.
-mtune=건축형
튜닝 건축형 다음을 제외하고 생성된 코드에 대해 적용 가능한 모든 것
ABI 및 사용 가능한 지침 세트. 에 대한 선택 건축형 are
와 동일 -행진=건축형.
-mmax-스택 프레임=n
함수의 스택 프레임이 초과할 때 경고 n 바이트.
-메트렉스4
-메트렉스100
옵션 -메트렉스4 and -메트렉스100 의 동의어입니다 -행진=v3 and -행진=v8
각각.
-mmul-bug-해결 방법
-mno-mul-bug-해결 방법
CPU 모델에 대한 "mulu" 및 "mulu" 명령어의 버그를 해결하려면
적용됩니다. 이 옵션은 기본적으로 활성화되어 있습니다.
-mp디버그
어셈블리 코드에서 CRIS 관련 자세한 디버그 관련 정보를 활성화합니다. 이것
옵션은 또한 끄는 효과가 있습니다 #NO_APP 형식화된 코드 표시기
어셈블리 파일의 시작 부분에 어셈블러.
-mcc-초기화
이전 명령어의 조건 코드 결과를 사용하지 마십시오. 항상 비교를 내보내고
조건 코드를 사용하기 전에 지침을 테스트하십시오.
-mno 부작용
사후 이외의 주소 지정 모드에서 부작용이 있는 명령을 내보내지 마십시오.
증가.
-mstack 정렬
-mno 스택 정렬
-mdata 정렬
-mno-데이터-정렬
-mconst-정렬
-mno-const-정렬
이러한 옵션(아니 - 옵션) 스택 프레임에 대한 배열(배열 제거),
최대 단일 데이터 액세스 크기에 대해 정렬할 개별 데이터 및 상수
선택한 CPU 모델에 대해 기본값은 32비트 정렬을 정렬하는 것입니다. 아비
구조 레이아웃과 같은 세부 정보는 이러한 옵션의 영향을 받지 않습니다.
-m32비트
-m16비트
-m8비트
위의 stack-data- 및 const-align 옵션과 유사하게 이러한 옵션은 다음을 정렬합니다.
스택 프레임, 쓰기 가능한 데이터 및 상수는 모두 32비트, 16비트 또는 8비트로 정렬됩니다.
기본값은 32비트 정렬입니다.
-mno-프롤로그-에필로그
-mprologue-에필로그
와 -mno-프롤로그-에필로그, 설정한 일반 기능 프롤로그 및 에필로그
스택 프레임이 생략되고 반환 명령이나 반환 시퀀스가 없습니다.
코드에서 생성됩니다. 이 옵션은 육안 검사와 함께만 사용하십시오.
컴파일된 코드: 호출 저장 레지스터가 반드시 있어야 할 때 경고나 오류가 생성되지 않습니다.
저장하거나 로컬 변수에 대한 저장소를 할당해야 합니다.
-mno-gotplt
-mgotplt
와 -fpic and -fPIC, 로드하는 명령어 시퀀스를 생성(생성하지 않음)하지 마십시오.
GOT의 PLT 부분에서 기능에 대한 주소 대신 (다른
아키텍처) PLT를 호출합니다. 기본값은 -mgotplt.
-멜프
cris-axis-elf 및 cris-axis-linux-gnu에서만 인식되는 레거시 no-op 옵션
목표.
-mlinux
레거시 no-op 옵션은 cris-axis-linux-gnu 대상에서만 인식됩니다.
-심
cris-axis-elf에 대해 인식된 이 옵션은 입출력과 연결되도록 정렬합니다.
시뮬레이터 라이브러리의 기능. 코드, 초기화된 데이터 및 XNUMX으로 초기화된 데이터
순차적으로 배정됩니다.
-sim2
처럼 -심그러나 링커 옵션을 전달하여 0x40000000 및 XNUMX에서 초기화된 데이터를 찾습니다.
초기화된 데이터는 0x80000000입니다.
CR16 옵션
이러한 옵션은 CR16 포트에 대해 특별히 정의됩니다.
-mmac
곱하기 누산 명령어 사용을 활성화합니다. 기본적으로 비활성화되어 있습니다.
-mcr16cplus
-mcr16c
CR16C 또는 CR16C+ 아키텍처용 코드를 생성합니다. CR16C+ 아키텍처가 기본입니다.
-msim
시뮬레이터와 호환되는 라이브러리 libsim.a를 연결합니다. ELF에 적용
컴파일러만.
-민트32
정수 유형을 32비트 너비로 선택합니다.
-mbit-ops
비트 조작을 위한 "sbit"/"cbit" 명령어를 생성합니다.
-mdata-모델=모델
데이터 모델을 선택합니다. 에 대한 선택 모델 are ..., 멀리 or 매질. 매질 기본값입니다.
그러나, 멀리 에 유효하지 않습니다 -mcr16c, CR16C 아키텍처가 지원하지 않기 때문에
원거리 데이터 모델.
다윈 옵션
이러한 옵션은 Darwin 운영 체제를 실행하는 모든 아키텍처에 대해 정의됩니다.
Darwin의 FSF GCC는 "뚱뚱한" 개체 파일을 생성하지 않습니다. 에 대한 개체 파일을 생성합니다.
GCC가 대상으로 구축한 단일 아키텍처입니다. Darwin에 대한 Apple의 GCC는 "지방"을 생성합니다.
파일이 여러 개인 경우 -아치 옵션이 사용됩니다. 컴파일러 또는 링커를 실행하여 수행합니다.
여러 번 결과를 함께 결합 지방.
생성된 파일의 하위 유형(예: ppc7400 or ppc970 or i686)에 의해 결정됩니다.
GCC가 타겟팅하는 ISA를 지정하는 플래그(예: -mcpu or -XNUMX 월. 그만큼
-force_cpusubtype_ALL 옵션을 사용하여 이를 무시할 수 있습니다.
Darwin 도구는 ISA 불일치가 있을 때 동작이 다릅니다. NS
어셈블러, as, 하위 유형에 유효한 명령만 사용할 수 있습니다.
생성하는 파일이므로 64비트 명령어를 ppc750 개체 파일. NS
공유 라이브러리용 링커, /usr/bin/libtool, 실패하고 요청하면 오류를 인쇄합니다.
입력 파일보다 덜 제한적인 하위 유형으로 공유 라이브러리를 생성합니다(
예를 들어 ppc970 개체 파일 ppc7400 도서관). 링커
실행 파일, ld, 조용히 실행 파일에 가장 제한적인 하위 유형을 제공합니다.
입력 파일.
-FDIR
프레임워크 디렉토리 추가 DIR 검색할 디렉토리 목록의 맨 앞에
헤더 파일의 경우. 이 디렉토리는 다음에 의해 지정된 디렉토리와 인터리브됩니다. -I
옵션을 선택하고 왼쪽에서 오른쪽으로 스캔됩니다.
프레임워크 디렉토리는 프레임워크가 있는 디렉토리입니다. 프레임워크는
디렉토리 헤더 및 / 또는 개인 헤더 그 안에 직접 포함된 디렉토리
끝 .뼈대. 프레임워크의 이름은 다음을 제외한 이 디렉토리의 이름입니다.
전에, .뼈대. 프레임워크와 관련된 헤더는 이 두 가지 중 하나에서 찾을 수 있습니다.
디렉토리, 헤더 먼저 검색되고 있습니다. 하위 프레임워크는 프레임워크입니다.
프레임워크에 있는 디렉토리 프레임 워크 예배 규칙서. 서브프레임워크 포함
헤더는 하위 프레임워크를 포함하는 프레임워크의 헤더에만 나타날 수 있습니다.
형제 서브프레임워크 헤더에서. 두 개의 하위 프레임워크가 다음에서 발생하면 형제입니다.
동일한 프레임워크. 서브프레임워크는 프레임워크와 같은 이름을 가질 수 없습니다. NS
이를 위반하면 경고가 발행됩니다. 현재 서브프레임워크는 다음을 가질 수 없습니다.
서브프레임워크; 앞으로 이를 지원하기 위해 메커니즘이 확장될 수 있습니다. NS
표준 프레임워크는 다음에서 찾을 수 있습니다. / 시스템 / 라이브러리 / 프레임 워크 and
/ 라이브러리 / 프레임 워크. 예제 포함은 "#include와 같습니다. ",
어디에 뼈대 프레임워크의 이름을 나타내며 헤더.h 에서 발견된다
개인 헤더 or 헤더 디렉토리.
-iframeworkDIR
처럼 -F 디렉토리가 시스템 디렉토리로 취급된다는 점을 제외하고. 주요 차이점
이 사이 -iframework and -F 그것으로 -iframework 컴파일러는 경고하지 않습니다
다음을 통해 찾은 헤더 파일에 포함된 구성에 대해 DIR. 이 옵션은 유효합니다
C 언어 계열에만 해당됩니다.
-거스
사용되는 기호에 대한 디버깅 정보를 내보냅니다. 찌르기 디버깅 형식의 경우
이것은 가능 -feliminate-unused-debug-기호. 이것은 기본적으로 ON입니다.
-gfull
모든 기호 및 유형에 대한 디버깅 정보를 내보냅니다.
-mmacosx-버전-최소=버전
이 실행 파일이 실행될 MacOS X의 초기 버전은 다음과 같습니다. 버전. 전형적인
~의 가치 버전 10.1, 10.2 및 10.3.9를 포함합니다.
컴파일러가 기본적으로 시스템의 헤더를 사용하도록 빌드된 경우 기본값은
이 옵션은 컴파일러가 실행 중인 시스템 버전입니다. 그렇지 않으면
기본값은 다음과 같이 많은 시스템 및 코드 기반과 호환되는 선택을 하는 것입니다.
수.
-mkernel
커널 개발 모드를 활성화합니다. NS -mkernel 옵션 세트 -공전, -fno-공통,
-fno-use-cxa-atexit, -fno-예외, -fno-non-call-exception, -fapple-kext,
-fno-약한 and -fno-rtti 해당되는 경우. 이 모드는 또한 -mno-altivec,
-msoft-float, -fno 내장 and -mlong-분기 PowerPC 타겟용.
-mon-byte-bool
"sizeof(bool)==1"이 되도록 "bool"의 기본값을 재정의합니다. 기본적으로 "sizeof(bool)"
Darwin/PowerPC용으로 컴파일할 때는 4이고 Darwin/x1용으로 컴파일할 때는 86이므로 이 값은
옵션은 x86에 영향을 주지 않습니다.
경고: 이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 -mon-byte-bool 스위치로 인해 GCC가 바이너리가 아닌 코드를 생성합니다.
해당 스위치 없이 생성된 코드와 호환됩니다. 이 스위치를 사용하려면 다음이 필요할 수 있습니다.
시스템 라이브러리를 포함하여 프로그램의 다른 모든 모듈을 다시 컴파일합니다. 이것을 사용
기본이 아닌 데이터 모델을 따르도록 전환합니다.
-mfix-and-continu
-고정 및 계속
-findirect-데이터
GDB가
동적으로로드 .o 파일을 이미 실행 중인 프로그램에 넣습니다. -findirect-데이터 and
-고정 및 계속 이전 버전과의 호환성을 위해 제공됩니다.
-all_load
정적 아카이브 라이브러리의 모든 구성원을 로드합니다. 남자 참조 ld(1) 자세한 내용은.
-arch_errors_fatal
잘못된 아키텍처를 가진 파일과 관련된 오류가 치명적입니다.
-bind_at_load
동적 링커가 모든 파일을 바인딩하도록 출력 파일을 표시합니다.
파일이 로드되거나 실행될 때 정의되지 않은 참조.
-묶음
Mach-o 번들 형식 파일을 생성합니다. 남자 참조 ld(1) 자세한 내용은.
-bundle_loader 실행 파일
이 옵션은 다음을 지정합니다. 실행 파일 빌드 출력 파일을 로드합니다.
연결됨. 남자 참조 ld(1) 자세한 내용은.
-다이내믹 라이브러리
이 옵션을 전달하면 GCC는 다음과 같은 경우 실행 파일 대신 동적 라이브러리를 생성합니다.
연결, Darwin을 사용하여 라이브러리 도구 명령.
-force_cpusubtype_ALL
이로 인해 GCC의 출력 파일이 공통 에 의해 제어되는 하위 유형 대신
전에, -mcpu or -XNUMX 월 옵션을 선택합니다.
-allowable_client 고객 이름
-고객 이름
-호환성_버전
-현재_버전
-dead_strip
-종속성 파일
-dylib_file
-dylinker_install_name
-동적
-내보낸_기호_목록
-파일 목록
-플랫_네임스페이스
-force_plat_namespace
-headerpad_max_install_names
-이미지_베이스
-초기화
-설치 이름
-keep_private_externs
-다중 모듈
-곱하기_정의
-multiply_defined_unused
-noall_load
-no_dead_strip_inits_and_terms
-nofix 사전 바인딩
-nomultidefs
-노프리바인드
-noseglinkit
-pagezero_size
-사전 바인딩
-prebind_all_twolevel_modules
-private_bundle
-read_only_relocs
-분할 정렬
-섹트객체 기호
-왜 로드
-세그1주소
-섹션 생성
-섹트객체 기호
- 부문별
-segaddr
-segs_read_only_addr
-segs_read_write_addr
-세그_주소_테이블
-seg_addr_table_filename
-세그링크드잇
-세그프로트
-segs_read_only_addr
-segs_read_write_addr
-단일_모듈
-공전
-하위_라이브러리
-sub_umbrella
-twolevel_namespace
-우산
-찾으시는 주소가 없습니다
-내보내지 않은_기호_목록
-weak_reference_mismatches
-무엇을 로드
이러한 옵션은 Darwin 링커로 전달됩니다. Darwin 링커 매뉴얼 페이지는 다음과 같이 설명합니다.
자세히.
12월 알파 옵션
Bowman의 -m 옵션은 DEC Alpha 구현에 대해 정의됩니다.
-mno-소프트-플로트
-msoft-float
부동 소수점에 대한 하드웨어 부동 소수점 명령어 사용(사용하지 않음)
작업. 언제 -msoft-float 가 지정되면 기능 libgcc.a 수행하는 데 사용됩니다
부동 소수점 연산. 를 에뮬레이트하는 루틴으로 대체되지 않는 한
부동 소수점 연산, 또는 이러한 에뮬레이션을 호출하는 방식으로 컴파일
루틴에서 이러한 루틴은 부동 소수점 연산을 실행합니다. 다음을 위해 컴파일하는 경우
부동 소수점 연산이 없는 Alpha의 경우 라이브러리가 빌드되었는지 확인해야 합니다.
그들을 부르지 않도록.
부동 소수점 연산이 없는 Alpha 구현은 다음을 수행해야 합니다.
부동 소수점 레지스터.
-mfp-reg
-mno-fp-regs
부동 소수점 레지스터 세트를 사용(사용하지 않음)하는 코드를 생성합니다. -mno-fp-regs
의미하다 -msoft-float. 부동 소수점 레지스터 세트를 사용하지 않으면 부동 소수점
피연산자는 정수 및 부동 소수점인 것처럼 정수 레지스터에 전달됩니다.
결과는 $f0 대신 $0으로 전달됩니다. 이것은 비표준 호출 시퀀스이므로
부동 소수점 인수 또는 컴파일된 코드에 의해 호출된 반환 값이 있는 모든 함수
과 -mno-fp-regs 또한 해당 옵션으로 컴파일해야 합니다.
이 옵션의 일반적인 용도는 사용하지 않는 커널을 빌드하는 것이므로 필요합니다.
부동 소수점 레지스터를 저장 및 복원하지 않습니다.
-이따
Alpha 아키텍처는 최대에 최적화된 부동 소수점 하드웨어를 구현합니다.
성능. 대부분 IEEE 부동 소수점 표준을 준수합니다. 하지만,
완전한 규정 준수를 위해서는 소프트웨어 지원이 필요합니다. 이 옵션은 코드를 생성합니다
완전한 IEEE 호환 코드 외 그 정확하지 않은 플래그 유지되지 않습니다(아래 참조).
이 옵션이 켜져 있으면 전처리기 매크로 "_IEEE_FP"가
편집. 결과 코드는 덜 효율적이지만 올바르게 지원할 수 있습니다.
비정규화된 숫자 및 비숫자 및 플러스/마이너스와 같은 예외적인 IEEE 값
무한대. 다른 Alpha 컴파일러는 이 옵션을 호출합니다. -ieee_with_no_inexact.
- 부정확한
이것은 -이따 생성된 코드가 IEEE를 유지한다는 점을 제외하고 정확하지 않은 플래그.
이 옵션을 켜면 생성된 코드가 완전히 호환되는 IEEE를 구현합니다.
수학. "_IEEE_FP" 외에 "_IEEE_FP_EXACT"가 전처리기 매크로로 정의됩니다.
일부 Alpha 구현에서 결과 코드는 다음보다 훨씬 느리게 실행될 수 있습니다.
기본적으로 생성된 코드. 의존하는 코드가 거의 없기 때문에
정확하지 않은 플래그, 일반적으로 이 옵션을 지정하지 않아야 합니다. 다른 알파 컴파일러 호출
이 옵션 -ieee_with_inexact.
-mfp-트랩 모드=트랩 모드
이 옵션은 활성화된 부동 소수점 관련 트랩을 제어합니다. 기타 알파
컴파일러는 이 옵션을 호출합니다. -fptm 트랩 모드. 트랩 모드는 XNUMX가지 중 하나로 설정할 수 있습니다.
값 :
n 이것은 기본(일반) 설정입니다. 활성화된 유일한 트랩은
소프트웨어에서 비활성화할 수 없는 것(예: 제로 트랩으로 나누기).
u 에 의해 활성화된 트랩 외에도 n, 언더플로 트랩도 활성화됩니다.
su 처럼 u, 그러나 지침은 소프트웨어 완료에 안전한 것으로 표시되어 있습니다(참조
자세한 내용은 알파 아키텍처 매뉴얼 참조).
수이 처럼 su, 그러나 정확하지 않은 트랩도 활성화됩니다.
-mfp-반올림 모드=반올림 모드
IEEE 반올림 모드를 선택합니다. 다른 Alpha 컴파일러는 이 옵션을 호출합니다. -fprm
반올림 모드. 그만큼 반올림 모드 다음 중 하나일 수 있습니다.
n 일반 IEEE 반올림 모드. 부동 소수점 숫자는 가장 가까운 쪽으로 반올림됩니다.
기계 번호 또는 동점의 경우 짝수 기계 번호쪽으로.
m 마이너스 무한대로 반올림합니다.
c 다진 반올림 모드. 부동 소수점 숫자는 XNUMX으로 반올림됩니다.
d 동적 반올림 모드. 부동 소수점 제어 레지스터의 필드(fpcr참조
알파 아키텍처 참조 설명서)에서 반올림 모드를 제어합니다. 더 씨
라이브러리는 더하기 무한대로 반올림하기 위해 이 레지스터를 초기화합니다. 따라서,
프로그램이 다음을 수정하지 않는 한 fpcr, d 플러스쪽으로 반올림에 해당
무한대.
-mtrap-정밀도=트랩 정밀도
Alpha 아키텍처에서 부동 소수점 트랩은 정확하지 않습니다. 이것은 없이 의미
소프트웨어 지원 플로팅 트랩 및 프로그램에서 복구 불가능
일반적으로 실행을 종료해야 합니다. GCC는 다음을 지원할 수 있는 코드를 생성할 수 있습니다.
운영 체제 트랩 처리기가 원인이 된 정확한 위치를 결정합니다.
부동 소수점 트랩. 응용 프로그램의 요구 사항에 따라 다른
정밀도 수준을 선택할 수 있습니다.
p 프로그램 정밀도. 이 옵션은 기본값이며 트랩 핸들러가
부동 소수점 예외를 일으킨 프로그램을 식별합니다.
f 기능 정밀도. 트랩 핸들러는 원인이 된 함수를 결정할 수 있습니다.
부동 소수점 예외.
i 지시 정밀도. 트랩 핸들러는 다음과 같은 정확한 명령어를 결정할 수 있습니다.
부동 소수점 예외가 발생했습니다.
다른 Alpha 컴파일러는 다음과 같은 동등한 옵션을 제공합니다. -scope_safe and
-재개_안전.
-mieee-준수
이 옵션은 생성된 코드를 IEEE 준수로 표시합니다. 이 옵션을 사용하면 안 됩니다.
또한 지정하지 않는 한 -mtrap-정밀도=i 그리고 -mfp-트랩-모드=su or
-mfp-트랩-모드=sui. 유일한 효과는 선을 방출하는 것입니다. .flag 48 기능에서
생성된 어셈블리 파일의 프롤로그.
-mbuild-상수
일반적으로 GCC는 32비트 또는 64비트 정수 상수를 검사하여 구성할 수 있는지 확인합니다.
XNUMX개 또는 XNUMX개의 명령어에서 더 작은 상수에서. 할 수 없으면 다음을 출력합니다.
상수를 리터럴로 만들고 런타임에 데이터 세그먼트에서 로드하는 코드를 생성합니다.
이 옵션을 사용하여 GCC가 구성하도록 요구합니다. 모든 코드를 사용하는 정수 상수
더 많은 지침이 필요합니다(최대값은 XNUMX개).
일반적으로 이 옵션을 사용하여 공유 라이브러리 동적 로더를 빌드합니다. 그 자체로
공유 라이브러리에서 변수를 찾기 전에 메모리에서 자신을 재배치해야 합니다.
자체 데이터 세그먼트의 상수.
-mbwx
-mno-bwx
-mcix
-mno-cix
-mfix
-mno 수정
-mmax
-mno-최대
GCC가 선택적 BWX, CIX, FIX 및 MAX를 사용하기 위해 코드를 생성해야 하는지 여부를 나타냅니다.
명령어 세트. 기본값은 CPU에서 지원하는 명령어 세트를 사용하는 것입니다.
를 통해 지정된 유형 -mcpu = 옵션 또는 GCC가 빌드된 CPU의 옵션이 없는 경우
지정되었습니다.
-mfloat-vax
-mfloat-ieee
대신 VAX F 및 G 부동 소수점 산술을 사용(사용하지 않음)하는 코드 생성
IEEE 단정밀도 및 배정밀도.
-mexplicit-relocs
-mno-명시적-relocs
이전 Alpha 어셈블러는
어셈블러 매크로. 이러한 매크로를 사용하면 최적의 명령 스케줄링이 허용되지 않습니다.
버전 2.12의 GNU binutils는 컴파일러가 다음을 수행할 수 있도록 하는 새로운 구문을 지원합니다.
어떤 재배치가 어떤 명령에 적용되어야 하는지 명시적으로 표시하십시오. 이 옵션은
GCC가 어셈블러의 기능을 감지하기 때문에 디버깅에 가장 유용합니다.
빌드되고 그에 따라 기본값을 설정합니다.
-msmall-데이터
-mlarge-데이터
인셀덤 공식 판매점인 -mexplicit-relocs 실제로 정적 데이터는 다음을 통해 액세스됩니다. gp-상대적
재배치. 언제 -msmall-데이터 가 사용되면 길이가 8바이트 이하인 객체가
a 작은 데이터 지역 (".sdata" 및 ".sbss" 섹션) 및 16비트를 통해 액세스
$gp 레지스터에서 재배치. 이것은 작은 데이터 영역의 크기를 다음으로 제한합니다.
64KB이지만 단일 명령어를 통해 변수에 직접 액세스할 수 있습니다.
디폴트는 -mlarge-데이터. 이 옵션을 사용하면 데이터 영역이 바로 아래로 제한됩니다.
2GB. 2GB 이상의 데이터가 필요한 프로그램은 "malloc" 또는 "mmap"을 사용해야 합니다.
프로그램의 데이터 세그먼트 대신 힙에 데이터를 할당합니다.
공유 라이브러리용 코드를 생성할 때, -fpic 의미하다 -msmall-데이터 and -fPIC
의미하다 -mlarge-데이터.
-m작은 텍스트
-mlarge-텍스트
인셀덤 공식 판매점인 -m작은 텍스트 사용되는 경우 컴파일러는 전체 프로그램의 코드가
(또는 공유 라이브러리)는 4MB에 맞으므로 분기 명령으로 도달할 수 있습니다.
인셀덤 공식 판매점인 -msmall-데이터 가 사용되면 컴파일러는 모든 로컬 기호가
동일한 $gp 값, 따라서 함수에 필요한 명령어 수 감소
4에서 1로 전화를 겁니다.
디폴트는 -mlarge-텍스트.
-mcpu =CPU_유형
머신 유형에 대한 명령어 세트 및 명령어 스케줄링 매개변수 설정
CPU_유형. 다음 중 하나를 지정할 수 있습니다. EV 스타일 이름 또는 해당 칩 번호.
GCC는 EV4, EV5 및 EV6 프로세서 제품군에 대한 스케줄링 매개변수를 지원하며
지정한 프로세서에서 명령어 세트의 기본값을 선택합니다. 만약에
프로세서 유형을 지정하지 않으면 GCC는 기본적으로 해당 프로세서가
컴파일러가 구축되었습니다.
지원되는 값 CPU_유형 are
ev4
ev45
21064
EV4로 예약되며 명령어 세트 확장이 없습니다.
ev5
21164
EV5로 예약되며 명령어 세트 확장이 없습니다.
ev56
21164a
EV5로 예약하고 BWX 확장을 지원합니다.
PCA56
21164pc
21164PC
EV5로 예약하고 BWX 및 MAX 확장을 지원합니다.
ev6
21264
EV6로 예약하고 BWX, FIX 및 MAX 확장을 지원합니다.
ev67
21264a
EV6으로 예약하고 BWX, CIX, FIX 및 MAX 확장을 지원합니다.
기본 도구 체인도 가치를 지원합니다. 출신, 최고의 아키텍처를 선택하는
호스트 프로세서에 대한 옵션입니다. -mcpu=네이티브 GCC가 인식하지 못하면 효과가 없습니다.
프로세서.
-mtune=CPU_유형
머신 유형에 대한 명령어 스케줄링 매개변수만 설정 CPU_유형. 그만큼
명령어 세트는 변경되지 않습니다.
기본 도구 체인도 가치를 지원합니다. 출신, 최고의 아키텍처를 선택하는
호스트 프로세서에 대한 옵션입니다. -mtune=네이티브 GCC가 인식하지 못하면 효과가 없습니다.
프로세서.
-메모리 대기 시간=시간
스케줄러가 다음에서 볼 수 있는 일반적인 메모리 참조에 대해 가정해야 하는 대기 시간을 설정합니다.
응용 프로그램. 이 숫자는 사용된 메모리 액세스 패턴에 크게 의존합니다.
응용 프로그램과 시스템의 외부 캐시 크기에 따라 다릅니다.
유효한 옵션 시간 are
번호
클록 주기를 나타내는 XNUMX진수입니다.
L1
L2
L3
본관
컴파일러에는 "전형적인" EV4 및
레벨 5, 1 및 2 캐시용 EV3 하드웨어(Dcache, Cache 및
Bcache) 뿐만 아니라 주 메모리에도 적용됩니다. L3는 EV5에만 유효합니다.
FR30 옵션
이러한 옵션은 FR30 포트에 대해 특별히 정의됩니다.
-m작은 모델
작은 주소 공간 모델을 사용하십시오. 이것은 더 작은 코드를 생성할 수 있지만
모든 기호 값과 주소는 20비트 범위에 맞습니다.
-mno-lsim
런타임 지원이 제공되었으므로 다음을 포함할 필요가 없다고 가정합니다.
시뮬레이터 라이브러리(libsim.a) 링커 명령줄에서.
FRV 옵션
-mgpr-32
처음 32개의 범용 레지스터만 사용하십시오.
-mgpr-64
64개의 범용 레지스터를 모두 사용합니다.
-mfpr-32
처음 32개의 부동 소수점 레지스터만 사용하십시오.
-mfpr-64
64개의 부동 소수점 레지스터를 모두 사용하십시오.
-mhard-float
부동 소수점 연산에 하드웨어 명령어를 사용하십시오.
-msoft-float
부동 소수점 연산에 라이브러리 루틴을 사용하십시오.
-malloc-cc
조건 코드 레지스터를 동적으로 할당합니다.
-mfixed-cc
조건 코드 레지스터를 동적으로 할당하지 말고 "icc0"만 사용하고
"fcc0".
-mdword
이중 단어 insns를 사용하도록 ABI를 변경합니다.
-mno-dword
이중 단어 지침을 사용하지 마십시오.
-m더블
부동 소수점 이중 명령어를 사용합니다.
-mno-더블
부동 소수점 이중 명령어를 사용하지 마십시오.
-미디어
미디어 지침을 사용합니다.
-mno-미디어
미디어 지침을 사용하지 마십시오.
-mmuladd
곱하기 및 더하기/빼기 명령어를 사용합니다.
-mno-물라드
곱하기 및 더하기/빼기 명령어를 사용하지 마십시오.
-mfdpic
함수 설명자를 사용하여 포인터를 나타내는 FDPIC ABI를 선택합니다.
기능. PIC/PIE 관련 옵션이 없으면 다음을 의미합니다. -fPIE. 과 -fpic or
-파이, GOT 항목 및 작은 데이터가 GOT에서 12비트 범위 내에 있다고 가정합니다.
기본 주소; ~와 함께 -fPIC or -fPIE, GOT 오프셋은 32비트로 계산됩니다. 와
비핀 엘프 대상, 이 옵션은 -msim.
-minline-plt
알려지지 않은 함수에 대한 함수 호출에서 PLT 항목 인라인 사용
로컬로 바인딩합니다. 없이는 아무런 효과가 없습니다. -mfdpic. 다음과 같은 경우 기본적으로 활성화됩니다.
공유 라이브러리에 대한 속도 및 컴파일 최적화(즉, -fPIC or -fpic), 또는
다음과 같은 최적화 옵션이 있을 때 -O3 또는 이상이 명령줄에 있습니다.
-mTLS
스레드 로컬 코드를 생성할 때 큰 TLS 세그먼트를 가정합니다.
-mtls
스레드 로컬 코드를 생성할 때 큰 TLS 세그먼트를 가정하지 마십시오.
-mgprel-로
에 있는 것으로 알려진 데이터에 대해 FDPIC ABI에서 "GPREL" 재배치 사용을 활성화합니다.
읽기 전용 섹션. 다음을 제외하고 기본적으로 활성화되어 있습니다. -fpic or -파이: 일지라도
전역 오프셋 테이블을 더 작게 만드는 데 도움이 될 수 있으며 1 명령어를 4로 교환합니다.
-fPIC or -fPIE, 3개의 명령에 대해 4개의 명령을 교환하며, 그 중 하나는 여러 사람이 공유할 수 있습니다.
기호이며 참조된 기호에 대한 GOT 항목이 필요하지 않으므로
승리할 가능성이 더 높습니다. 그렇지 않은 경우 -mno-gprel-ro 비활성화하는 데 사용할 수 있습니다.
-multilib-라이브러리-pic
(FD가 아닌 라이브러리) 사진 라이브러리와 연결합니다. 에 의해 암시된다 - 라이브러리 사진뿐만 아니라
~에 의해 -fPIC and -fpic 없이 -mfdpic. 명시적으로 사용할 필요는 없습니다.
-Mlinked-FP
스택 프레임이 생성될 때마다 항상 프레임 포인터를 생성하는 EABI 요구 사항을 따릅니다.
할당됩니다. 이 옵션은 기본적으로 활성화되어 있으며 다음으로 비활성화할 수 있습니다.
-mno 연결 fp.
-mlong-통화
간접 주소 지정을 사용하여 현재 컴파일 단위 외부에서 함수를 호출합니다. 이것
함수를 32비트 주소 공간 내 어디에나 배치할 수 있습니다.
-악성 레이블
이전 패킷에 NOP를 삽입하여 레이블을 8바이트 경계에 맞추십시오.
이 옵션은 VLIW 패킹이 활성화된 경우에만 효과가 있습니다. 새로 만들지 않는다
패킷; 기존에 NOP를 추가할 뿐입니다.
- 라이브러리 사진
위치 독립적인 EABI 코드를 생성합니다.
-맥-4
처음 XNUMX개의 미디어 누산기 레지스터만 사용하십시오.
-맥-8
XNUMX개의 미디어 누산기 레지스터를 모두 사용합니다.
-mpack
VLIW 지침을 포장하십시오.
-mno-팩
VLIW 지침을 포장하지 마십시오.
-mno 플래그
e_flags에 ABI 스위치를 표시하지 마십시오.
-mcond-이동
조건부 이동 명령 사용을 활성화합니다(기본값).
이 스위치는 주로 컴파일러를 디버깅하기 위한 것이며 다음 단계에서 제거될 것입니다.
미래 버전.
-mno-cond-이동
조건부 이동 명령의 사용을 비활성화합니다.
이 스위치는 주로 컴파일러를 디버깅하기 위한 것이며 다음 단계에서 제거될 것입니다.
미래 버전.
-mscc
조건부 집합 명령어 사용을 활성화합니다(기본값).
이 스위치는 주로 컴파일러를 디버깅하기 위한 것이며 다음 단계에서 제거될 것입니다.
미래 버전.
-mno-scc
조건부 집합 명령어의 사용을 비활성화합니다.
이 스위치는 주로 컴파일러를 디버깅하기 위한 것이며 다음 단계에서 제거될 것입니다.
미래 버전.
-mcond-exec
조건부 실행 사용을 활성화합니다(기본값).
이 스위치는 주로 컴파일러를 디버깅하기 위한 것이며 다음 단계에서 제거될 것입니다.
미래 버전.
-mno-조건-exec
조건부 실행 사용을 비활성화합니다.
이 스위치는 주로 컴파일러를 디버깅하기 위한 것이며 다음 단계에서 제거될 것입니다.
미래 버전.
-mvliw-분기
패스를 실행하여 분기를 VLIW 명령어(기본값)로 묶습니다.
이 스위치는 주로 컴파일러를 디버깅하기 위한 것이며 다음 단계에서 제거될 것입니다.
미래 버전.
-mno-vliw-분기
분기를 VLIW 명령어로 패킹하는 패스를 실행하지 마십시오.
이 스위치는 주로 컴파일러를 디버깅하기 위한 것이며 다음 단계에서 제거될 것입니다.
미래 버전.
-m다중 조건 실행
"&&" 및 "||" 최적화 활성화 조건부 실행(기본값).
이 스위치는 주로 컴파일러를 디버깅하기 위한 것이며 다음 단계에서 제거될 것입니다.
미래 버전.
-mno-다중 조건-exec
"&&" 및 "||" 최적화 비활성화 조건부 실행에서.
이 스위치는 주로 컴파일러를 디버깅하기 위한 것이며 다음 단계에서 제거될 것입니다.
미래 버전.
-mnested-cond-exec
중첩 조건부 실행 최적화를 활성화합니다(기본값).
이 스위치는 주로 컴파일러를 디버깅하기 위한 것이며 다음 단계에서 제거될 것입니다.
미래 버전.
-mno-중첩-조건-exec
중첩 조건부 실행 최적화를 비활성화합니다.
이 스위치는 주로 컴파일러를 디버깅하기 위한 것이며 다음 단계에서 제거될 것입니다.
미래 버전.
-moptimize-멤바
이 스위치는 컴파일러 생성 코드에서 중복 "멤바" 명령을 제거합니다.
기본적으로 활성화되어 있습니다.
-mno-optimize-멤바
이 스위치는 중복 "멤바" 명령의 자동 제거를 비활성화합니다.
생성된 코드.
-mtomcat-통계
가스가 바람둥이 통계를 출력하도록 합니다.
-mcpu =CPU
코드를 생성할 프로세서 유형을 선택합니다. 가능한 값은 Frv, fr550,
여자 꽁무니를 쫓아 다니다, fr500, fr450, fr405, fr400, fr300 and 간편한 설치.
GNU / 리눅스 옵션
Bowman의 -m 옵션은 GNU/Linux 대상에 대해 정의됩니다.
-mglibc
GNU C 라이브러리를 사용하십시오. 이것은 다음을 제외하고 기본값입니다. *-*-리눅스-*ulibc* and
*-*-리눅스-*안드로이드* 목표.
-뮤클립
uClibc C 라이브러리를 사용합니다. 이것은 기본 설정입니다. *-*-리눅스-*ulibc* 목표.
-엠비오닉
Bionic C 라이브러리를 사용합니다. 이것은 기본 설정입니다. *-*-리눅스-*안드로이드* 목표.
-맨드로이드
Android 플랫폼과 호환되는 컴파일 코드. 이것은 기본 설정입니다.
*-*-리눅스-*안드로이드* 목표.
컴파일할 때 이 옵션은 -엠비오닉, -fPIC, -fno-예외 and -fno-rtti by
기본. 연결할 때 이 옵션은 GCC 드라이버가 Android 전용 옵션을 전달하도록 합니다.
링커에. 마지막으로 이 옵션을 사용하면 전처리기 매크로 "__ANDROID__"가
한정된.
-tno-안드로이드-cc
의 컴파일 효과 비활성화 -맨드로이드, 즉, 활성화하지 마십시오 -엠비오닉, -fPIC,
-fno-예외 and -fno-rtti 기본적으로
-tno-안드로이드-ld
연결 효과 비활성화 -맨드로이드즉, 표준 Linux 연결 옵션을
링커.
H8 / 300 옵션
Bowman의 -m 옵션은 H8/300 구현에 대해 정의됩니다.
-mrelax
가능하면 링크 시간에 일부 주소 참조를 줄이십시오. 링커 옵션을 사용
-편하게 하다.
-mh H8/300H용 코드를 생성합니다.
-ms H8S용 코드를 생성합니다.
-mn 일반 모드에서 H8S 및 H8/300H용 코드를 생성합니다. 이 스위치를 사용해야 합니다
어느 쪽이든 -mh or -ms.
-ms2600
H8S/2600용 코드를 생성합니다. 이 스위치는 다음과 함께 사용해야 합니다. -ms.
-멕스
확장 레지스터는 모니터로 기능을 실행하기 전에 스택에 저장됩니다.
기인하다. 기본 옵션은 -멕스. 이 옵션은 H8S 대상에만 유효합니다.
-mno-exr
모니터로 기능을 실행하기 전에 확장 레지스터가 스택에 저장되지 않습니다.
기인하다. 기본 옵션은 -mno-exr. 이 옵션은 H8S 대상에만 유효합니다.
-민트32
"int" 데이터를 기본적으로 32비트로 만듭니다.
-악성-300
H8/300H 및 H8S에서는 H8/300과 동일한 정렬 규칙을 사용합니다. 기본값
H8/300H 및 H8S의 경우 4바이트 경계에서 long 및 float를 정렬합니다.
-악성-300 2바이트 경계로 정렬됩니다. 이 옵션은 효과가 없습니다
H8/300에서.
HPPA 옵션
Bowman의 -m 옵션은 HPPA 컴퓨터 제품군에 대해 정의됩니다.
-행진=건축형
지정된 아키텍처에 대한 코드를 생성합니다. 에 대한 선택 건축형 are
1.0 PA 1.0의 경우, 1.1 PA 1.1의 경우 2.0 PA 2.0 프로세서용. 인용하다
/usr/lib/sched.models 적절한 아키텍처 옵션을 결정하기 위해 HP-UX 시스템에서
당신의 기계를 위해. 더 낮은 번호의 아키텍처용으로 컴파일된 코드는 더 높은 아키텍처에서 실행됩니다.
번호가 매겨진 아키텍처이지만 그 반대는 아닙니다.
-mpa-risc-1-0
-mpa-risc-1-1
-mpa-risc-2-0
동의어 -1.0월=XNUMX, -1.1월=XNUMX및 -2.0월=XNUMX 각각.
-m점프-인-지연
이 옵션은 무시되며 호환성 목적으로만 제공됩니다.
-mdisable-fpregs
부동 소수점 레지스터가 어떤 식으로든 사용되지 않도록 합니다. 이것은 필요하다
부동 소수점 레지스터의 지연 컨텍스트 스위칭을 수행하는 컴파일 커널. 만약에
이 옵션을 사용하고 부동 소수점 연산을 수행하려고 하면 컴파일러
중단합니다.
-mdisable-인덱싱
컴파일러가 인덱싱 주소 모드를 사용하지 못하도록 합니다. 이것은 오히려 일부를 피합니다
MACH에서 MIG 생성 코드를 컴파일할 때 모호한 문제.
-mno-공간-regs
대상에 공간 레지스터가 없다고 가정하는 코드를 생성합니다. 이를 통해 GCC는
더 빠른 간접 호출을 생성하고 확장되지 않은 인덱스 주소 모드를 사용합니다.
이러한 코드는 레벨 0 PA 시스템 및 커널에 적합합니다.
-mfast-간접 호출
호출이 공간 경계를 넘지 않는다고 가정하는 코드를 생성합니다. 이를 통해 GCC는
더 빠른 간접 호출을 수행하는 코드를 방출합니다.
이 옵션은 공유 라이브러리 또는 중첩 함수가 있는 경우 작동하지 않습니다.
-m고정 범위=레지스터 범위
주어진 레지스터 범위를 고정 레지스터로 취급하는 코드를 생성합니다. 고정 레지스터
레지스터 할당자는 사용할 수 없습니다. 이것은 커널을 컴파일할 때 유용합니다.
암호. 레지스터 범위는 대시로 구분된 두 개의 레지스터로 지정됩니다. 다수의
레지스터 범위는 쉼표로 구분하여 지정할 수 있습니다.
-mlong-로드-스토어
HP-UX 3에서 필요에 따라 10개 명령어 로드 및 저장 시퀀스 생성
링커. 이것은 +k HP 컴파일러에 대한 옵션입니다.
-가동 가능한 런타임
ELF 시스템에 대해 HP에서 제안한 휴대용 호출 규칙을 사용합니다.
- 가스
GAS만 이해하는 어셈블러 지시문 사용을 활성화합니다.
-ms스케줄=CPU 유형
머신 유형에 대한 제약 조건에 따라 코드를 예약합니다. CPU 유형. 선택
for CPU 유형 are 700 7100, 7100LC, 7200, 7300 and 8000. 인용하다
/usr/lib/sched.models 적절한 예약 옵션을 결정하기 위해 HP-UX 시스템에서
당신의 기계. 기본 일정은 8000.
-mlinker-opt
HP-UX 링커에서 최적화 단계를 활성화합니다. 이것은 심볼릭 디버깅을 만듭니다.
불가능한. 또한 HP-UX 8 및 HP-UX 9 링커에서 버그를 트리거합니다.
일부 프로그램을 연결할 때 가짜 오류 메시지를 제공합니다.
-msoft-float
부동 소수점에 대한 라이브러리 호출이 포함된 출력을 생성합니다. 경고: 필수
모든 HPPA 대상에 대해 라이브러리를 사용할 수 있는 것은 아닙니다. 일반적으로 시설의
기계의 일반적인 C 컴파일러가 사용되지만 이것은 교차에서 직접 수행될 수 없습니다.
편집. 적절한 라이브러리를 제공하기 위해 스스로 준비해야 합니다.
크로스 컴파일을 위한 함수
-msoft-float 출력 파일의 호출 규칙을 변경합니다. 그러므로 그것은 단지
컴파일하면 유용합니다. 모든 이 옵션이 있는 프로그램의 특히, 당신은
편집하다 libgcc.a, GCC와 함께 제공되는 라이브러리, -msoft-float 이를 위해
작동합니다.
-msio
서버 IO에 대한 사전 정의 "_SIO"를 생성합니다. 기본값은 -mwsio. 이것은 생성
워크스테이션 IO에 대해 "__hp9000s700", "__hp9000s700__" 및 "_WSIO"를 미리 정의합니다.
이러한 옵션은 HP-UX 및 HI-UX에서 사용할 수 있습니다.
-mgnu-ld
GNU에 특정한 옵션 사용 ld. 이것은 통과 -공유 에 ld 공유를 구축할 때
도서관. GCC가 명시적 또는 암시적으로 구성될 때 기본값입니다.
GNU 링커. 이 옵션은 다음 항목에 영향을 주지 않습니다. ld 호출된다; 그것은 단지 무엇을 변경
매개변수가 전달됩니다. ld. 그만큼 ld 에 의해 결정됩니다.
--with-ld 구성 옵션, GCC의 프로그램 검색 경로, 그리고 마지막으로 사용자의 PATH.
GCC에서 사용하는 링커는 다음을 사용하여 인쇄할 수 있습니다. 어느 `gcc -인쇄 프로그램 이름=ld`. 이
옵션은 64비트 HP-UX GCC에서만 사용할 수 있습니다.
hppa*64*-*-hpux*.
-mhp-ld
HP 전용 옵션 사용 ld. 이것은 통과 -b 에 ld 공유 라이브러리를 구축할 때
그리고 패스 +수락 유형 불일치 에 ld 모든 링크에서. GCC일 때 기본값입니다.
명시적이든 암시적이든 HP 링커를 사용하여 구성됩니다. 이 옵션은 영향을 미치지 않습니다
어느 ld 호출된다; 전달되는 매개변수만 변경합니다. ld. 그만큼 ld
에 의해 결정됩니다. --with-ld 구성 옵션, GCC의 프로그램 검색
경로, 그리고 마지막으로 사용자의 PATH. GCC에서 사용하는 링커는 다음을 사용하여 인쇄할 수 있습니다.
어느 `gcc -인쇄 프로그램 이름=ld`. 이 옵션은 64비트 HP-UX에서만 사용할 수 있습니다.
GCC, 즉 다음으로 구성된 hppa*64*-*-hpux*.
-mlong-통화
긴 호출 시퀀스를 사용하는 코드를 생성합니다. 이렇게 하면 통화가 항상 가능합니다.
링커 생성 스텁에 도달합니다. 기본값은 다음 경우에만 긴 호출을 생성하는 것입니다.
호출 사이트에서 함수 또는 번역 단위의 시작 부분까지의 거리,
이 경우 사용 중인 분기 유형에 의해 설정된 미리 정의된 제한을 초과할 수 있습니다. NS
일반 호출에 대한 제한은 PA 7,600,000에 대해 각각 240,000 및 2.0바이트입니다.
및 PA 1.X 아키텍처. Sibcall은 항상 240,000바이트로 제한됩니다.
거리는 사용할 때 함수의 시작 부분에서 측정됩니다.
-ffunction-섹션 옵션을 사용하거나 - 가스 and -mno-휴대용-런타임 옵션
HP-UX에서 SOM 링커와 함께 사용됩니다.
일반적으로 이 옵션을 사용하면 성능이 저하되므로 바람직하지 않습니다. 하지만,
특히 부분 연결을 사용하여 대규모 응용 프로그램에 유용할 수 있습니다.
애플리케이션을 빌드합니다.
사용되는 긴 호출의 유형은 어셈블러와 링커의 기능에 따라 다릅니다.
생성되는 코드의 유형. 긴 시간을 지원하는 시스템에 미치는 영향
절대 호출 및 긴 그림 기호 차이 또는 PC 상대 호출은 다음과 같아야 합니다.
상대적으로 작습니다. 그러나 간접 호출은 pic 코드의 32비트 ELF 시스템에서 사용됩니다.
그리고 꽤 깁니다.
-뮤닉스=유닉스 표준
컴파일러 생성은 지정된 UNIX 표준에 대한 시작 파일을 미리 정의하고 선택합니다.
에 대한 선택 유닉스 표준 are 93, 95 and 98. 93 모든 HP-UX 버전에서 지원됩니다.
95 HP-UX 10.10 이상에서 사용할 수 있습니다. 98 HP-UX 11.11 이상에서 사용할 수 있습니다.
기본값은 93 HP-UX 10.00의 경우 95 HP-UX 10.10 ~ 11.00의 경우 98
HP-UX 11.11 이상용.
-뮤닉스=93 GCC 3.3 및 3.4와 동일한 사전 정의를 제공합니다. -뮤닉스=95 제공
"XOPEN_UNIX" 및 "_XOPEN_SOURCE_EXTENDED"에 대한 추가 사전 정의 및 시작 파일
유닉스95.o. -뮤닉스=98 "_XOPEN_UNIX"에 대한 추가 사전 정의를 제공합니다.
"_XOPEN_SOURCE_EXTENDED", "_INCLUDE__STDC_A1_SOURCE" 및 "_INCLUDE_XOPEN_SOURCE_500",
그리고 시작 파일 유닉스98.o.
그것은 중대한 이 옵션은 다양한 라이브러리의 인터페이스를 변경합니다.
루틴. 또한 C 라이브러리의 작동 동작에도 영향을 줍니다. 따라서, 극단
이 옵션을 사용할 때는 주의가 필요합니다.
둘 이상의 UNIX 표준에서 작동하도록 의도된 라이브러리 코드는 테스트해야 합니다.
"__xpg4_extended_mask" 변수를 적절하게 설정하고 복원합니다. 대부분의 GNU 소프트웨어
이 기능을 제공하지 않습니다.
-nolibdld
libdld.sl을 검색하기 위한 링크 옵션의 생성을 억제합니다. -공전 옵션은
HP-UX 10 이상에서 지정됩니다.
-공전
libc에서 setlocale의 HP-UX 구현은 libdld.sl에 종속됩니다. 거기
libdld.sl의 아카이브 버전이 아닙니다. 따라서, 언제 -공전 옵션이 지정되고,
이 종속성을 해결하려면 특수 링크 옵션이 필요합니다.
HP-UX 10 이상에서 GCC 드라이버는 다음과 연결하는 데 필요한 옵션을 추가합니다.
libdld.sl이 -공전 옵션이 지정됩니다. 이로 인해 결과 바이너리가
역동적이다. 64비트 포트에서 링커는 기본적으로 동적 바이너리를 생성합니다.
어떤 경우. NS -nolibdld 옵션을 사용하여 GCC 드라이버가 추가하는 것을 방지할 수 있습니다.
이러한 링크 옵션.
- 스레드
멀티스레딩 지원 추가 디시 실 HP-UX에서 라이브러리. 이 옵션
전처리기와 링커 모두에 대한 플래그를 설정합니다.
IA-64 옵션
이들은 있습니다 -m Intel IA-64 아키텍처에 대해 정의된 옵션.
-mbig-엔디안
빅 엔디안 대상에 대한 코드를 생성합니다. 이것은 HP-UX의 기본값입니다.
-미리틀 엔디안
리틀 엔디안 대상에 대한 코드를 생성합니다. 이것은 AIX5 및 GNU/Linux의 기본값입니다.
-mgnu-as
-mno-gnu-as
GNU 어셈블러용 코드를 생성하거나 생성하지 마십시오. 이것이 기본값입니다.
-mgnu-ld
-mno-gnu-ld
GNU 링커에 대한 코드를 생성하거나 생성하지 마십시오. 이것이 기본값입니다.
-mno-그림
전역 포인터 레지스터를 사용하지 않는 코드를 생성합니다. 결과는 위치가 아닙니다.
독립 코드이며 IA-64 ABI를 위반합니다.
-mvolatile-asm-중지
-mno-휘발성-asm-stop
휘발성 asm 문 직전과 직후에 정지 비트를 생성하거나 생성하지 마십시오.
-m 레지스터 이름
-mno 레지스터 이름
생성(또는 하지 않음) in, LOC및 아웃 스택 레지스터의 레지스터 이름. 이것
어셈블러 출력을 더 읽기 쉽게 만들 수 있습니다.
-mno-sdata
-msdata
작은 데이터 섹션을 사용하는 최적화를 비활성화(또는 활성화)합니다. 이것은 유용 할 수 있습니다
옵티마이저 버그를 해결하기 위해.
-m상수-gp
단일 상수 전역 포인터 값을 사용하는 코드를 생성합니다. 이것은 다음과 같은 경우에 유용합니다.
커널 코드 컴파일
-자동 사진
자체 재배치 가능한 코드를 생성합니다. 이것은 의미합니다 -m상수-gp. 이것은 유용하다
펌웨어 코드를 컴파일할 때.
-minline-float-divide-min-latency
최소 대기 시간을 사용하여 부동 소수점 값의 인라인 분할을 위한 코드 생성
연산.
-minline-float-divide-max-처리량
최대 처리량을 사용하여 부동 소수점 값의 인라인 분할을 위한 코드 생성
연산.
-mno-inline-float-divide
부동 소수점 값을 나누기 위해 인라인 코드를 생성하지 마십시오.
-minline-int-divide-min-latency
최소 대기 시간을 사용하여 정수 값의 인라인 분할을 위한 코드 생성
연산.
-minline-int-divide-max-처리량
최대 처리량을 사용하여 정수 값의 인라인 분할을 위한 코드 생성
연산.
-mno-인라인-int-나누기
정수 값을 나누기 위해 인라인 코드를 생성하지 마십시오.
-minline-sqrt-최소 대기 시간
최소 대기 시간 알고리즘을 사용하여 인라인 제곱근에 대한 코드를 생성합니다.
-minline-sqrt-max-처리량
최대 처리량 알고리즘을 사용하여 인라인 제곱근에 대한 코드를 생성합니다.
-mno-인라인-sqrt
"sqrt"에 대한 인라인 코드를 생성하지 마십시오.
-머퓨즈드-매드
-mno-융합-매드
융합된 곱하기/더하기 또는 곱하기/빼기를 사용하는 코드를 생성하지 마십시오.
지침. 기본값은 이 지침을 사용하는 것입니다.
-mno-dwarf2-asm
-mdwarf2-asm
DWARF 2 행 번호 디버깅 정보에 대한 어셈블러 코드를 생성하지 마십시오.
이것은 GNU 어셈블러를 사용하지 않을 때 유용할 수 있습니다.
-거의 스톱 비트
-mno-초기 정지 비트
정지 비트가 명령 바로 이전보다 먼저 배치되도록 허용합니다.
정지 비트를 트리거했습니다. 이것은 명령 스케줄링을 향상시킬 수 있지만 항상 그런 것은 아닙니다.
그렇게.
-m고정 범위=레지스터 범위
주어진 레지스터 범위를 고정 레지스터로 취급하는 코드를 생성합니다. 고정 레지스터
레지스터 할당자는 사용할 수 없습니다. 이것은 커널을 컴파일할 때 유용합니다.
암호. 레지스터 범위는 대시로 구분된 두 개의 레지스터로 지정됩니다. 다수의
레지스터 범위는 쉼표로 구분하여 지정할 수 있습니다.
-mtls-크기=tls 크기
즉시 TLS 오프셋의 비트 크기를 지정합니다. 유효한 값은 14, 22 및 64입니다.
-mtune=CPU 유형
특정 CPU에 대한 명령 스케줄링을 조정합니다. 유효한 값은 다음과 같습니다. Itanium,
아이테니엄1, 합병, 아이테니엄2및 맥킨리.
-milp32.
-mlp64
32비트 또는 64비트 환경용 코드를 생성합니다. 32비트 환경은 int,
long 및 32비트에 대한 포인터입니다. 64비트 환경은 int를 32비트로 설정하고 long 및
64비트에 대한 포인터. 이는 HP-UX 특정 플래그입니다.
-mno-sched-br-data-spec
-msched-br-데이터-사양
다시 로드하기 전에 데이터 추측 스케줄링을 (비활성화/활성화) 활성화합니다. 이로 인해 다음이 생성됩니다.
"ld.a" 지침 및 해당 검사 지침("ld.c" / "chk.a"). NS
기본값은 '비활성화'입니다.
-msched-ar-데이터-사양
-mno-sched-ar-data-spec
(En/Dis) 재로드 후 데이터 추측 스케줄링을 활성화합니다. 이로 인해 다음이 생성됩니다.
"ld.a" 지침 및 해당 검사 지침("ld.c" / "chk.a"). NS
기본값은 '활성화'입니다.
-mno-sched-control-spec
-msched-제어-사양
(Dis/En) 제어 추측 스케줄링. 이 기능은 동안에만 사용할 수 있습니다.
지역 스케줄링(즉, 다시 로드하기 전). 그 결과 "ld."가 생성됩니다.
지침 및 해당 검사 지침 "chk.s". 기본값은
'장애를 입히다'.
-msched-br-in-data-spec
-mno-sched-br-in-data-spec
(En/Dis) 데이터에 의존하는 명령어의 추측 스케줄링 가능
재장전 전 추측 부하. 이 있어야만 효과적입니다. -msched-br-데이터-사양
활성화. 기본값은 '활성화'입니다.
-msched-ar-in-data-spec
-mno-sched-ar-in-data-spec
(En/Dis) 데이터에 의존하는 명령어의 추측 스케줄링 가능
재장전 후 추측 부하. 이 있어야만 효과적입니다. -msched-ar-데이터-사양
활성화. 기본값은 '활성화'입니다.
-msched-in-control-spec
-mno-sched-in-control-spec
(En/Dis)
투기 부하를 제어합니다. 이 있어야만 효과적입니다. -msched-제어-사양 사용하도록 설정되었습니다.
기본값은 '활성화'입니다.
-mno-sched prefer-non-data-spec-insns
-msched-prefer-비-데이터-사양-insns
활성화된 경우 데이터 추측 지침이 없는 경우에만 일정에 대해 선택됩니다.
현재 다른 선택. 이것은 데이터 추측을 훨씬 더 많이 사용합니다.
보수적 인. 기본값은 '비활성화'입니다.
-mno-sched-prefer-non-control-spec-insns
-msched-prefer-non-control-spec-insns
활성화된 경우 제어-투기적 지침이 있는 경우에만 일정에 대해 선택됩니다.
현재로서는 다른 선택이 없습니다. 이것은 제어 추측을 많이 사용합니다.
더 보수적이다. 기본값은 '비활성화'입니다.
-mno-sched-count-spec-in-중요 경로
-msched-count-spec-in-중요-경로
활성화된 경우 예측 종속성이 계산 중에 고려됩니다.
지시 우선 순위. 이것은 추측의 사용을 조금 더 만듭니다
보수적 인. 기본값은 '비활성화'입니다.
-msched-spec-ldc
간단한 데이터 추측 검사를 사용합니다. 이 옵션은 기본적으로 켜져 있습니다.
-msched-제어-사양-ldc
제어 추측에 대한 간단한 검사를 사용합니다. 이 옵션은 기본적으로 켜져 있습니다.
-매 주기 후 msched-stop-bits
스케줄링할 때 모든 주기 후에 정지 비트를 배치하십시오. 이 옵션은 기본적으로 켜져 있습니다.
-msched-fp-mem-deps-제로 비용
부동 소수점 저장 및 로드는 다음과 같은 경우 충돌을 일으키지 않는다고 가정합니다.
같은 명령 그룹에 배치됩니다. 이 옵션은 기본적으로 비활성화되어 있습니다.
-msel-sched-dont-check-control-spec
선택적 스케줄링에서 제어 추측에 대한 검사를 생성합니다. 이 깃발은
기본적으로 비활성화되어 있습니다.
-msched-최대-메모리-insns=최대-인스
명령 그룹당 메모리 인스의 수를 제한하여 더 낮은 우선 순위를 부여
동일한 명령 그룹에서 예약을 시도하는 후속 메모리 시설.
캐시 뱅크 충돌을 방지하는 데 자주 유용합니다. 기본값은 1입니다.
-msched-최대-메모리-insns-하드 제한
에 의해 지정된 한계를 만듭니다. msched-최대-메모리-insns 엄격한 제한, 더 많은 것을 허용하지 않음
명령 그룹의 해당 숫자보다 그렇지 않으면 한계가 "소프트"입니다.
한계에 도달하면 비메모리 작업이 선호되지만 메모리
작업은 여전히 예약될 수 있습니다.
LM32 옵션
Bowman의 -m 옵션은 LatticeMico32 아키텍처에 대해 정의됩니다.
-mbarrel-shift 사용 가능
배럴 시프트 명령을 활성화합니다.
-mdivide 사용
나누기 및 모듈러스 명령어를 활성화합니다.
-m곱하기 가능
곱하기 명령어를 활성화합니다.
-msign 확장 가능
부호 확장 지침을 활성화합니다.
-muser 사용 가능
사용자 정의 지침을 활성화합니다.
M32C 옵션
-mcpu =name
코드가 생성되는 CPU를 선택합니다. name 중 하나 일 수 있습니다 r8c R8C/Tiny용
연속, m16c M16C(최대 /60) 시리즈의 경우, m32cm M16C/80 시리즈 또는 m32c
M32C/80 시리즈용.
-msim
프로그램이 시뮬레이터에서 실행되도록 지정합니다. 이로 인해 대체
예를 들어 파일 I/O를 지원하는 링크될 런타임 라이브러리. 당신은하지 않아야
실제 하드웨어에서 실행될 프로그램을 생성할 때 이 옵션을 사용하십시오. 당신은해야합니다
필요한 I/O 기능에 대해 자체 런타임 라이브러리를 제공합니다.
-memregs=번호
코드 생성 중에 GCC가 사용하는 메모리 기반 의사 레지스터의 수를 지정합니다.
이러한 의사 레지스터는 실제 레지스터처럼 사용되므로
코드를 사용 가능한 레지스터에 맞추는 GCC의 능력과 성능 저하
레지스터 대신 메모리를 사용합니다. 프로그램의 모든 모듈은
이 옵션에 대해 동일한 값으로 컴파일됩니다. 때문에 이것을 사용하면 안 된다.
GCC의 기본 런타임 라이브러리 옵션.
M32R/D 옵션
Bowman의 -m 옵션은 Renesas M32R/D 아키텍처에 대해 정의됩니다.
-m32r2
M32R/2용 코드를 생성합니다.
-m32rx
M32R/X용 코드를 생성합니다.
-m32r
M32R용 코드를 생성합니다. 이것이 기본값입니다.
-mmodel=작은
모든 객체가 하위 16MB 메모리에 있다고 가정합니다.
"ld24" 명령어로 로드됨), 모든 서브루틴이
"bl"지시. 이것이 기본값입니다.
특정 개체의 주소 지정 가능성은 "모델" 속성으로 설정할 수 있습니다.
-mmodel=중간
객체가 32비트 주소 공간의 아무 곳에나 있을 수 있다고 가정합니다(컴파일러가 생성
주소를 로드하기 위한 "seth/add3" 명령어), 모든 서브루틴이 다음과 같다고 가정합니다.
"bl" 명령으로 도달할 수 있습니다.
-mmodel=대형
객체가 32비트 주소 공간의 아무 곳에나 있을 수 있다고 가정합니다(컴파일러가 생성
주소를 로드하기 위한 "seth/add3" 명령어), 서브루틴이
"bl" 명령어로 도달 가능(컴파일러는 훨씬 느린
"seth/add3/jl" 명령 시퀀스).
-msdata=없음
작은 데이터 영역의 사용을 비활성화합니다. 변수는 ".data", ".bss" 또는
".rodata"("섹션" 속성이 지정되지 않은 경우). 이것이 기본값입니다.
작은 데이터 영역은 ".sdata" 및 ".sbss" 섹션으로 구성됩니다. 개체는 다음과 같습니다.
다음 중 하나를 사용하여 "섹션" 속성을 사용하여 작은 데이터 영역에 명시적으로 넣습니다.
섹션을 참조하십시오.
-msdata=sdata
작은 전역 및 정적 데이터를 작은 데이터 영역에 넣되 특별한 생성은 하지 마십시오.
참조하는 코드입니다.
-msdata=사용
작은 데이터 영역에 작은 전역 및 정적 데이터를 넣고 특수 생성
참조하도록 지시합니다.
-G NUM
전역 및 정적 개체를 다음보다 작거나 같음 NUM 작은 데이터로 바이트 또는
일반 데이터 또는 BSS 섹션 대신 BSS 섹션. 기본값 NUM is
8. 그만큼 -msdata 옵션은 다음 중 하나로 설정해야 합니다. 데이터 or 사용 이 옵션에
효과.
모든 모듈은 동일한 파일로 컴파일해야 합니다. -G NUM 값. 다른 것으로 컴파일
~의 가치 NUM 작동하거나 작동하지 않을 수 있습니다. 그렇지 않으면 링커에서 오류가 발생합니다.
메시지---잘못된 코드가 생성되지 않습니다.
-m디버그
컴파일러의 M32R 관련 코드가 도움이 될 수 있는 일부 통계를 표시하도록 합니다.
디버깅 프로그램에서.
-악성 루프
모든 루프를 32바이트 경계에 맞춥니다.
-mno-align 루프
루프에 대해 32바이트 정렬을 적용하지 마십시오. 이것이 기본값입니다.
-오류율=번호
발행물 번호 사이클당 지침. 번호 1 또는 2만 가능합니다.
-mbranch 비용=번호
번호 1 또는 2만 가능합니다. 1이면 조건부보다 분기가 선호됩니다.
코드가 2이면 반대가 적용됩니다.
-mflush-트랩=번호
캐시를 플러시하는 데 사용할 트랩 번호를 지정합니다. 기본값은 12입니다. 유효
숫자는 0에서 15 사이입니다.
-mno-플러시-트랩
트랩을 사용하여 캐시를 플러시할 수 없도록 지정합니다.
-mflush-func=name
캐시를 플러시하기 위해 호출할 운영 체제 함수의 이름을 지정합니다. NS
기본값은 _플러시_캐시하지만 함수 호출은 트랩을 사용할 수 없는 경우에만 사용됩니다.
-mno-플러시-펑크
캐시 플러시를 위한 OS 기능이 없음을 나타냅니다.
M680x0 옵션
이들은 있습니다 -m M680x0 및 ColdFire 프로세서에 대해 정의된 옵션. 기본 설정
컴파일러를 구성할 때 선택한 아키텍처에 따라 다릅니다. 기본값
가장 일반적인 선택 사항은 아래에 나와 있습니다.
-행진=아치
특정 M680x0 또는 ColdFire 명령어 세트 아키텍처에 대한 코드를 생성합니다.
허용 값 아치 M680x0 아키텍처의 경우: 68000, 68010, 68020, 68030,
68040, 68060 and CPU32. ColdFire 아키텍처는 Freescale의
ISA 분류 및 허용 값은 다음과 같습니다. 이사야, 이사 플러스, 이사 브 and 이삭.
GCC는 매크로 "__mcf아치__" ColdFire용 코드를 생성할 때마다
표적. NS 아치 이 매크로에서 -XNUMX 월 위에 주어진 인수.
함께 사용하면, -XNUMX 월 and -mtune 유사한 제품군에서 실행되는 코드 선택
프로세서이지만 특정 마이크로아키텍처에 최적화되어 있습니다.
-mcpu =CPU
특정 M680x0 또는 ColdFire 프로세서용 코드를 생성합니다. M680x0 CPUs는:
68000, 68010, 68020, 68030, 68040, 68060, 68302, 68332 and CPU32. 콜드파이어 CPUs
CPU를 제품군으로 분류하는 아래 표에 나와 있습니다.
가족 : -mcpu 인수
51 : 51 51ac 51ag 51센트 51em 51je 51jf 51jg 51jm 51mm 51qe 51qm
5206 : 5202 5204 5206
5206e : 5206e
5208 : 5207 5208
5211a : 5210a 5211a
5213 : 5211 5212 5213
5216 : 5214 5216
52235 : 52230 52231 52232 52233 52234 52235
5225 : 5224 5225
52259 : 52252 52254 52255 52256 52258 52259
5235 : 5232 5233 5234 5235 SR 523x
5249 : 5249
5250 : 5250
5271 : 5270 5271
5272 : 5272
5275 : 5274 5275
5282 : 5280 5281 5282 SR 528x
53017 : 53011 53012 53013 53014 53015 53016 53017
5307 : 5307
5329 : 5327 5328 5329 SR 532x
5373 : 5372 5373 SR 537x
5407 : 5407
5475 : 5470 5471 5472 5473 5474 5475 SR 547x 5480 5481 5482 5483 5484 5485
-mcpu =CPU 재정의 -행진=아치 if 아치 와 호환 CPU. 다른 조합
-mcpu and -XNUMX 월 거부됩니다.
GCC는 "__mcf_cpu_" 매크로를 정의합니다.CPU" ColdFire 대상이 될 때 CPU 선택됩니다. 또한
"__mcf_family_가족", 여기서 값 가족 위의 표에 의해 주어진다.
-mtune=곡조
에 의해 설정된 제약 조건 내에서 특정 마이크로아키텍처에 대한 코드를 조정합니다. -XNUMX 월
and -mcpu. M680x0 마이크로아키텍처는 다음과 같습니다. 68000, 68010, 68020, 68030, 68040,
68060 and CPU32. ColdFire 마이크로아키텍처는 다음과 같습니다. cfv1, cfv2, cfv3, cfv4 and
cfv4e.
VOUS pouvez의 aussi 사용 -mtune = 68020-40 68020에서 비교적 잘 실행되어야 하는 코드의 경우,
68030 및 68040 대상. -mtune = 68020-60 유사하지만 다음과 같이 68060개의 대상을 포함합니다.
잘. 이 두 옵션은 다음과 동일한 조정 결정을 선택합니다. -m68020-40 and -m68020-60
각각.
GCC는 매크로 "__mc아치" 그리고 "__mc아치__" 680x0 아키텍처에 맞게 조정할 때
아치. 또한 "mc아치" 둘 중 하나가 아니라면 -안시 또는 비 GNU -표준 옵션이 사용됩니다.
GCC가 다음에서 선택한 아키텍처 범위에 대해 조정 중인 경우 -mtune = 68020-40 or
-mtune = 68020-60, 범위의 모든 아키텍처에 대한 매크로를 정의합니다.
GCC는 또한 매크로 "__m일찍__" ColdFire 마이크로아키텍처를 튜닝할 때
일찍어디로 일찍 위에 주어진 인수 중 하나입니다.
-m68000
-mc68000
68000에 대한 출력을 생성합니다. 이것은 컴파일러가 다음을 위해 구성된 경우 기본값입니다.
68000 기반 시스템. 그것은 동등하다 -68000월=XNUMX.
68000을 포함하여 000 또는 EC68008 코어가 있는 마이크로컨트롤러에 이 옵션을 사용합니다.
68302, 68306, 68307, 68322, 68328 및 68356.
-m68010
68010에 대한 출력을 생성합니다. 이것은 컴파일러가 다음을 위해 구성된 경우 기본값입니다.
68010 기반 시스템. 그것은 동등하다 -68010월=XNUMX.
-m68020
-mc68020
68020에 대한 출력을 생성합니다. 이것은 컴파일러가 다음을 위해 구성된 경우 기본값입니다.
68020 기반 시스템. 그것은 동등하다 -68020월=XNUMX.
-m68030
68030에 대한 출력을 생성합니다. 이것은 컴파일러가 다음을 위해 구성된 경우 기본값입니다.
68030 기반 시스템. 그것은 동등하다 -68030월=XNUMX.
-m68040
68040에 대한 출력을 생성합니다. 이것은 컴파일러가 다음을 위해 구성된 경우 기본값입니다.
68040 기반 시스템. 그것은 동등하다 -68040월=XNUMX.
이 옵션은 다음에 의해 에뮬레이트되어야 하는 68881/68882 명령어의 사용을 금지합니다.
68040의 소프트웨어입니다. 68040에 에뮬레이트할 코드가 없는 경우 이 옵션을 사용하십시오.
그 지시.
-m68060
68060에 대한 출력을 생성합니다. 이것은 컴파일러가 다음을 위해 구성된 경우 기본값입니다.
68060 기반 시스템. 그것은 동등하다 -68060월=XNUMX.
이 옵션은 68020 및 68881/68882 명령어의 사용을 금지합니다.
68060의 소프트웨어에 의해 에뮬레이트됩니다. 68060에 코드가 없는 경우 이 옵션을 사용하십시오.
이러한 지침을 모방합니다.
-mcpu32
CPU32에 대한 출력을 생성합니다. 컴파일러가 다음을 위해 구성된 경우 기본값입니다.
CPU32 기반 시스템. 그것은 동등하다 -32월=cpuXNUMX.
32을 포함하여 CPU32 또는 CPU68330+ 코어가 있는 마이크로컨트롤러에 이 옵션을 사용합니다.
68331, 68332, 68333, 68334, 68336, 68340, 68341, 68349 및 68360
-m5200
520X ColdFire CPU용 출력을 생성합니다. 컴파일러가 다음과 같은 경우 기본값입니다.
520X 기반 시스템용으로 구성됩니다. 그것은 동등하다 -mcpu=5206, 현재
해당 옵션을 위해 더 이상 사용되지 않습니다.
MCF5200, MCF5202,
MCF5204 및 MCF5206.
-m5206e
5206e ColdFire CPU에 대한 출력을 생성합니다. 이 옵션은 이제 더 이상 사용되지 않습니다.
동등한 -mcpu=5206e.
-m528x
ColdFire 528X 제품군의 구성원에 대한 출력을 생성합니다. 옵션은 지금
동등한 것을 선호하여 더 이상 사용되지 않음 -mcpu=528x.
-m5307
ColdFire 5307 CPU에 대한 출력을 생성합니다. 이 옵션은 이제 더 이상 사용되지 않습니다.
동등한 -mcpu=5307.
-m5407
ColdFire 5407 CPU에 대한 출력을 생성합니다. 이 옵션은 이제 더 이상 사용되지 않습니다.
동등한 -mcpu=5407.
-mcfv4e
ColdFire V4e 제품군 CPU에 대한 출력을 생성합니다(예: 547x/548x). 여기에는 사용이 포함됩니다.
하드웨어 부동 소수점 명령어. 옵션은 다음과 같습니다. -mcpu=547x하고는
이제 그 옵션을 위해 더 이상 사용되지 않습니다.
-m68020-40
새 명령어를 사용하지 않고 68040에 대한 출력을 생성합니다. 이 결과
68020/68881 또는 68030 또는
68040. 생성된 코드는 에뮬레이트된 68881 명령어를 사용합니다.
68040.
옵션은 다음과 같습니다. -68020월=XNUMX -mtune = 68020-40.
-m68020-60
새 명령어를 사용하지 않고 68060에 대한 출력을 생성합니다. 이 결과
68020/68881 또는 68030 또는
68040. 생성된 코드는 에뮬레이트된 68881 명령어를 사용합니다.
68060.
옵션은 다음과 같습니다. -68020월=XNUMX -mtune = 68020-60.
-mhard-float
-m68881
부동 소수점 명령어를 생성합니다. 이것은 68020 이상의 기본값이며,
FPU가 있는 ColdFire 장치의 경우. "__HAVE_68881__" 매크로를 정의합니다.
M680x0 대상 및 ColdFire 대상의 "__mcffpu__".
-msoft-float
부동 소수점 명령어를 생성하지 마십시오. 대신 라이브러리 호출을 사용하십시오. 이것이
68000, 68010 및 68832 대상에 대한 기본값입니다. ColdFire의 기본값이기도 합니다.
FPU가 없는 장치.
-mdiv
-mno-div
ColdFire 하드웨어 나누기 및 나머지 명령어를 생성합니다(생성하지 않음). 만약에
-XNUMX 월 없이 사용됩니다 -mcpu, 기본값은 ColdFire 아키텍처의 경우 "on"이고 "off"입니다.
M680x0 아키텍처용. 그렇지 않으면 기본값을 대상 CPU에서 가져옵니다(
기본 CPU 또는 다음으로 지정된 CPU -mcpu). 예를 들어 기본값은 "꺼짐"입니다.
for -mcpu=5206 및 "켜기"에 대한 -mcpu=5206e.
이 옵션이 활성화되면 GCC는 매크로 "__mcfhwdiv__"를 정의합니다.
-m짧은
"int" 유형을 "short int"와 같이 16비트 너비로 간주합니다. 또한 매개변수
스택에 전달된 API는 API가 있는 대상에서도 16비트 경계에 맞춰 정렬됩니다.
32비트로 승격을 요구합니다.
-mno-짧은
"int" 유형을 16비트 너비로 간주하지 마십시오. 이것이 기본값입니다.
-mnobit필드
-mno 비트 필드
비트 필드 명령어를 사용하지 마십시오. NS -m68000, -mcpu32 and -m5200 옵션 암시
-mnobit필드.
-mbit필드
비트 필드 명령을 사용하십시오. NS -m68020 옵션 의미 -mbit필드. 이것은
68020용으로 설계된 구성을 사용하는 경우 기본값입니다.
-mrtd
고정된 함수를 사용하는 다른 함수 호출 규칙을 사용합니다.
인수를 팝하는 "rtd" 명령과 함께 반환되는 인수의 수
돌아오는 동안. 이것은 필요가 없기 때문에 호출자에게 하나의 명령을 저장합니다.
거기에 인수를 팝니다.
이 호출 규칙은 Unix에서 일반적으로 사용되는 것과 호환되지 않으므로
Unix 컴파일러로 컴파일된 라이브러리를 호출해야 하는 경우 사용할 수 없습니다.
또한 변수를 사용하는 모든 함수에 대해 함수 프로토타입을 제공해야 합니다.
인수의 수("printf" 포함); 그렇지 않으면 잘못된 코드가 생성됩니다.
해당 함수를 호출합니다.
또한 너무 많은 함수를 호출하면 심각하게 잘못된 코드가 발생합니다.
인수. (일반적으로 추가 인수는 무해하게 무시됩니다.)
"rtd" 명령어는 68010, 68020, 68030, 68040, 68060 및 CPU32에서 지원됩니다.
프로세서, 그러나 68000 또는 5200은 아닙니다.
-mno-rtd
에서 선택한 호출 규칙을 사용하지 마십시오. -mrtd. 이것이 기본값입니다.
-악성-int
-mno-정렬-int
GCC가 "int", "long", "long long", "float", "double" 및 "long"을 정렬할지 여부를 제어합니다.
32비트 경계의 "더블" 변수(-악성-int) 또는 16비트 경계
(-mno-정렬-int). 32비트 경계에 변수를 정렬하면 실행되는 코드가 생성됩니다.
더 많은 메모리를 희생하면서 32비트 버스가 있는 프로세서에서 다소 더 빠릅니다.
경고: 당신이 -악성-int 스위치, GCC는 위의 내용을 포함하는 구조를 정렬합니다.
대부분의 게시된 애플리케이션 바이너리 인터페이스 사양과 다른 유형
m68k.
-mprel
전역을 사용하는 대신 68000의 PC 상대 주소 지정 모드를 직접 사용하십시오.
오프셋 테이블. 현재 이 옵션은 다음을 의미합니다. -fpic, 최대 16비트 오프셋 허용
PC 상대 주소 지정용. -fPIC 현재 지원되지 않습니다 -mprel하지만
이것은 68020 이상 프로세서에서 지원될 수 있습니다.
-mno-엄격한 정렬
-mstrict-정렬
정렬되지 않은 메모리 참조가 시스템에서 처리된다고 가정하지 마십시오.
-msep-데이터
데이터 세그먼트가 메모리의 다른 영역에 위치할 수 있도록 하는 코드 생성
텍스트 세그먼트에서. 이를 통해
가상 메모리 관리. 이 옵션은 다음을 의미합니다. -fPIC.
-mno-XNUMX월-데이터
데이터 세그먼트가 텍스트 세그먼트를 따른다고 가정하는 코드를 생성하십시오. 이것은
기본값.
-중간 공유 라이브러리
라이브러리 ID 방식을 통해 공유 라이브러리를 지원하는 코드를 생성합니다. 이것은 허용
가상 메모리가 없는 환경에서 제자리 실행 및 공유 라이브러리용
관리. 이 옵션은 다음을 의미합니다. -fPIC.
-mno-id-공유 라이브러리
ID 기반 공유 라이브러리가 사용되고 있다고 가정하지 않는 코드를 생성합니다. 이것은
기본값.
-mshared-library-id=n
컴파일 중인 ID 기반 공유 라이브러리의 식별 번호를 지정합니다.
값을 0으로 지정하면 더 간결한 코드가 생성됩니다. 다른 값 지정하기
그 숫자를 현재 라이브러리에 할당하지만 더 이상 공간 또는 시간이 아닙니다.
이 옵션을 생략하는 것보다 효율적입니다.
-mxgot
-mno-xgot
ColdFire용 위치 독립적 코드를 생성할 때 다음과 같은 경우 작동하는 코드를 생성하십시오.
GOT에는 8192개 이상의 항목이 있습니다. 이 코드는 코드보다 크고 느립니다.
이 옵션 없이 생성됩니다. M680x0 프로세서에서는 이 옵션이 필요하지 않습니다. -fPIC
충분합니다.
GCC는 일반적으로 단일 명령어를 사용하여 GOT에서 값을 로드합니다. 이 동안
상대적으로 효율적이며 GOT가 약 64k보다 작은 경우에만 작동합니다. 아무것
크면 링커가 다음과 같은 오류를 보고하도록 합니다.
맞게 잘린 재배치: R_68K_GOT16O foobar
이런 일이 발생하면 다음을 사용하여 코드를 다시 컴파일해야 합니다. -mxgot. 그것은 다음과 함께 작동해야합니다
매우 큰 GOT. 그러나 다음으로 생성된 코드 -mxgot 하기 때문에 효율성이 떨어집니다.
전역 기호의 값을 가져오기 위해 4개의 명령이 필요합니다.
최신 버전의 GNU 링커를 포함한 일부 링커는 다음을 생성할 수 있습니다.
여러 GOT 및 정렬 GOT 항목. 그러한 링커가 있는 경우에만 필요합니다.
사용 -mxgot 8192개 이상의 GOT에 접근하는 단일 오브젝트 파일을 컴파일할 때
항목. 아주 소수만이 할 수 있습니다.
이 옵션은 GCC가 위치 독립적인 코드를 생성하지 않는 한 아무런 효과가 없습니다.
엠코어 옵션
이들은 있습니다 -m Motorola M*Core 프로세서에 대해 정의된 옵션입니다.
-mhardlit
-mno-hardlit
XNUMX개 이하의 명령어로 수행할 수 있는 경우 상수를 코드 스트림에 인라인하십시오.
-mdiv
-mno-div
나누기 명령을 사용합니다. (기본적으로 활성화됨).
-mrelax-즉시
-mno-relax-즉시
비트 연산에서 임의 크기의 즉시를 허용합니다.
-mwide-비트 필드
-mno 와이드 비트 필드
항상 비트 필드를 "int" 크기로 처리합니다.
-m4byte-함수
-mno-4byte-함수
모든 기능을 4바이트 경계에 맞춰 정렬합니다.
-mcallgraph-데이터
-mno-callgraph-데이터
callgraph 정보를 내보냅니다.
-mslow-바이트
-mno-느린 바이트
바이트 수량을 읽을 때 워드 액세스를 선호합니다.
-미리틀 엔디안
-mbig-엔디안
리틀 엔디안 대상에 대한 코드를 생성합니다.
-m210
-m340
210 프로세서용 코드를 생성합니다.
-mno-lsim
런타임 지원이 제공되었다고 가정하고 시뮬레이터 라이브러리를 생략하십시오.
(libsim.a) 링커 명령줄에서.
-mstack 증가=크기
단일 스택 증분 작업의 최대량을 설정합니다. 큰 값은
많은 양을 필요로 하는 기능을 포함하는 프로그램의 속도를 높입니다.
스택 공간이지만 스택이 확장되면 분할 오류를 유발할 수도 있습니다.
너무 많은. 기본값은 0x1000입니다.
MeP 옵션
-맙스디프
두 레지스터 간의 절대 차이인 "abs" 명령을 활성화합니다.
-몰 옵션
모든 선택적 명령어를 활성화합니다---평균, 곱하기, 나누기, 비트 연산,
선행 XNUMX, 절대 차이, 최소/최대, 클립 및 채도.
-평균
두 레지스터의 평균을 계산하는 "ave" 명령을 활성화합니다.
-m 기반=n
크기 변수 n 바이트 이하의 데이터는 기본적으로 ".based" 섹션에 배치됩니다.
기반 변수는 $tp 레지스터를 기본 레지스터로 사용하며 128바이트 제한이 있습니다.
".based" 섹션으로 이동합니다.
-엠비탑스
비트 작업 명령 활성화---비트 테스트("btstm"), 설정("bsetm"), 지우기
("bclrm"), 반전("bnotm") 및 테스트 및 설정("tas").
-MC=name
어떤 섹션 상수 데이터를 배치할지 선택합니다. name 수 작은, ...및 멀리.
-mclip
"클립" 명령을 활성화합니다. 참고 -mclip 당신도 그렇지 않으면 유용하지 않습니다
제공 -mminmax.
-mconfig=name
기본 제공 코어 구성 중 하나를 선택합니다. 각 MeP 칩에는 하나 이상의
그 안에 모듈; 각 모듈에는 코어 CPU와 다양한 보조 프로세서가 있습니다.
지침 및 주변 장치. GCC의 일부가 아닌 "MeP-Integrator" 도구는 다음을 제공합니다.
이 옵션을 통해 이러한 구성; 이 옵션을 사용하는 것은 모든
해당 명령줄 옵션. 기본 구성은 디폴트 값.
-엠캅
보조 프로세서 명령을 활성화합니다. 기본적으로 이것은 32비트 보조 프로세서입니다. 메모
보조 프로세서는 일반적으로 다음을 통해 활성화됩니다. -mconfig= 옵션을 선택합니다.
-mcop32
32비트 보조 프로세서의 명령을 활성화합니다.
-mcop64
64비트 보조 프로세서의 명령을 활성화합니다.
-mivc2
IVC2 스케줄링을 활성화합니다. IVC2는 64비트 VLIW 보조 프로세서입니다.
-MDC
상수 변수가 ".near" 섹션에 배치되도록 합니다.
-mdiv
"div" 및 "divu" 명령어를 활성화합니다.
-메브
빅 엔디안 코드를 생성합니다.
-멜
리틀 엔디안 코드를 생성합니다.
-mio-휘발성
"io" 속성으로 표시된 모든 변수가
휘발성으로 간주됩니다.
-ml 기본적으로 변수가 ".far" 섹션에 할당되도록 합니다.
-mleadz
"leadz"(선행 XNUMX) 명령을 활성화합니다.
-mm 변수가 기본적으로 ".near" 섹션에 할당되도록 합니다.
-mminmax
"최소" 및 "최대" 명령을 활성화합니다.
-멀티
곱하기 및 곱하기 누산 명령어를 활성화합니다.
-mno 옵션
에 의해 활성화된 모든 선택적 지침을 비활성화합니다. -몰 옵션.
-mrepeat
낮은 오버헤드 루핑에 사용되는 "반복" 및 "erepeat" 명령을 활성화합니다.
-ms 모든 변수가 ".tiny" 섹션으로 기본 설정되도록 합니다. 있음을 참고하세요
이 섹션에 대한 65536바이트 제한입니다. 이러한 변수에 대한 액세스는 %gp 기반을 사용합니다.
등록하십시오.
-msatur
포화 지침을 활성화합니다. 컴파일러는 현재
자체적으로 생성하지만 이 옵션은 다른 도구와의 호환성을 위해 포함되어 있습니다.
"처럼"처럼.
-msdram
기본 ROM 기반 런타임 대신 SDRAM 기반 런타임을 연결합니다.
-msim
시뮬레이터 런타임 라이브러리를 연결합니다.
-msimnovec
재설정을 위한 내장 지원을 제외하고 시뮬레이터 런타임 라이브러리를 연결하고
예외 벡터 및 테이블.
-MTF
모든 함수가 ".far" 섹션으로 기본 설정되도록 합니다. 이 옵션이 없으면 기능
기본값은 ".near" 섹션입니다.
-최소 =n
변수 n 바이트 이하가 ".tiny" 섹션에 할당됩니다. 이것들
변수는 $gp 기본 레지스터를 사용합니다. 이 옵션의 기본값은 4이지만 주의하십시오.
".tiny" 섹션에는 65536바이트 제한이 있습니다.
마이크로블레이즈 옵션
-msoft-float
부동 소수점에 소프트웨어 에뮬레이션을 사용합니다(기본값).
-mhard-float
하드웨어 부동 소수점 명령어를 사용합니다.
-mmemcpy
블록 이동을 최적화하지 말고 "memcpy"를 사용하십시오.
-mno-clearbss
이 옵션은 더 이상 사용되지 않습니다. 사용하다 -fno-zero-initialized-in-bss 대신.
-mcpu =CPU 유형
주어진 CPU의 기능과 일정 코드를 사용합니다. 지원되는 값은
체재 vX.YY.Z어디로 X 메이저 버전이며, YY 는 부 버전이고 Z is
호환성 코드. 예시 값은 v3.00.a, v4.00.b, v5.00.a, v5.00.b, v5.00.b,
v6.00.a.
-mxl-소프트-뮬
소프트웨어 곱하기 에뮬레이션을 사용합니다(기본값).
-mxl-소프트-div
분할에 소프트웨어 에뮬레이션을 사용합니다(기본값).
-mxl-배럴 시프트
하드웨어 배럴 시프터를 사용하십시오.
-mxl-패턴-비교
패턴 비교 지침을 사용하십시오.
-m작은 나누기
작은 부호 있는 정수 나누기에 대해 테이블 조회 최적화를 사용합니다.
-mxl-스택 검사
이 옵션은 더 이상 사용되지 않습니다. 사용하다 -fstack-체크 대신.
-mxl-gp-opt
GP 기준 ".sdata"/".sbss" 섹션을 사용합니다.
-mxl-곱하기-높음
32x32 곱셈의 높은 부분에 높은 곱셈 명령어를 사용합니다.
-mxl-플로트 변환
하드웨어 부동 소수점 변환 명령어를 사용하십시오.
-mxl-플로트-sqrt
하드웨어 부동 소수점 제곱근 명령어를 사용합니다.
-mbig-엔디안
빅 엔디안 대상에 대한 코드를 생성합니다.
-미리틀 엔디안
리틀 엔디안 대상에 대한 코드를 생성합니다.
-mxl-재주문
재정렬 지침을 사용하십시오(스왑 및 바이트 역 로드/저장).
-mxl-모드-앱 모델
애플리케이션 모델 선택 앱 모델. 유효한 모델은
실행 파일
일반 실행 파일(기본값), 시작 코드 사용 crt0.o.
xmdstub
Xilinx XMD(Microprocessor Debugger) 기반 소프트웨어 침입 디버그와 함께 사용
xmdstub라는 에이전트. 이것은 시작 파일을 사용합니다 crt1.o 시작 주소를 설정합니다.
프로그램을 0x800으로 설정합니다.
부트 스트랩
부트로더를 사용하여 로드되는 애플리케이션의 경우. 이 모델은 시작 파일을 사용합니다.
crt2.o 프로세서 리셋 벡터 핸들러를 포함하지 않습니다. 이것은 적합하다
프로세서 리셋에 대한 제어를 부트로더가 아닌 부트로더로 이전하기 위해
응용 프로그램.
노벡터
MicroBlaze 벡터가 필요하지 않은 애플리케이션용. 이 옵션
모니터링 응용 프로그램 내에서 실행되는 응용 프로그램에 유용할 수 있습니다. 이 모델
사용 crt3.o 시작 파일로.
선택권 -xl-모드-앱 모델 에 대한 더 이상 사용되지 않는 별칭입니다. -mxl-모드-앱 모델.
MIPS 옵션
-EB 빅 엔디안 코드를 생성합니다.
-엘자 리틀 엔디안 코드를 생성합니다. 에 대한 기본값입니다. 밉스*엘-*-* 구성.
-행진=아치
에서 실행되는 코드 생성 아치, 일반 MIPS ISA의 이름이거나
특정 프로세서의 이름. ISA 이름은 다음과 같습니다. 밉스1, 밉스2, 밉스3, 밉스4,
밉스32, 밉스32r2, 밉스32r3, 밉스32r5, 밉스32r6, 밉스64, 밉스64r2, 밉스64r3, 밉스64r5
and 밉스64r6. 프로세서 이름은 다음과 같습니다. 4kc, 4km, 4kp, 4ksc, 4kec, 4켐, 4킵, 4ksd,
5kc, 5 년, 20kc, 24kc, 24kf2_1, 24kf1_1, 24kec, 24kef2_1, 24kef1_1, 34kc, 34kf2_1,
34kf1_1, 34kn, 74kc, 74kf2_1, 74kf1_1, 74kf3_2, 1004kc, 1004kf2_1, 1004kf1_1,
룽손2e, 룽손2f, 룽손3a, m4k, m14k, m14kc, m14ke, m14kec, 옥테온, 옥테온+,
옥테온2, 옥테온3, 오리온, p5600, r2000, r3000, r3900, r4000, r4400, r4600, r4650,
r4700, r6000, r8000, rm7000, rm9000, r10000, r12000, r14000, r16000, sb1, sr71000,
vr4100, vr4111, vr4120, vr4130, vr4300, vr5000, vr5400, vr5500, xlr and xlp. 그만큼
특별한 가치 프롬아비 선택한 ABI에 대해 가장 호환되는 아키텍처를 선택합니다.
(그건, 밉스1 32비트 ABI 및 밉스3 64비트 ABI용).
기본 Linux/GNU 도구 체인도 값을 지원합니다. 출신, 최고의 선택
호스트 프로세서에 대한 아키텍처 옵션. -march = 네이티브 GCC가 수행하는 경우 효과가 없습니다.
프로세서를 인식하지 못합니다.
프로세서 이름에서 최종 000 다음과 같이 축약 될 수 있습니다. k (예 : -행진=r2k).
접두사는 선택 사항이며 vr 쓰여질 수 있습니다 r.
양식의 이름 nf2_1 FPU가 클럭의 절반으로 클럭된 프로세서를 참조하십시오.
핵심, 양식의 이름 nf1_1 동일한 속도로 클럭된 FPU가 있는 프로세서를 참조하십시오.
핵심으로, 형식의 이름 nf3_2 비율로 클럭된 FPU가 있는 프로세서를 참조하십시오.
코어에 대해 3:2의 비율입니다. 호환성을 위해, nf 로 받아들여진다.
동의어 nf2_1 동안 nx and bfx 의 동의어로 받아들여집니다. nf1_1.
GCC는 이 옵션의 값에 따라 두 개의 매크로를 정의합니다. 첫 번째는 "_MIPS_ARCH"입니다.
대상 아키텍처의 이름을 문자열로 제공합니다. 두 번째는 형식이 있습니다.
"_MIPS_ARCH_푸"어디로 푸 "_MIPS_ARCH"의 대문자 값입니다. 예를 들어,
-2000월=rXNUMX "_MIPS_ARCH"를 "r2000"으로 설정하고 매크로 "_MIPS_ARCH_R2000"을 정의합니다.
"_MIPS_ARCH" 매크로는 위에 제공된 프로세서 이름을 사용합니다. 기타에서
단어, 전체 접두사가 있고 약어가 없습니다. 000 as k. 의 경우 에서-
ABI, 매크로는 확인된 아키텍처의 이름을 지정합니다("mips1" 또는 "mips3"). 그것은 이름
아니오일 때 기본 아키텍처 -XNUMX 월 옵션이 주어집니다.
-mtune=아치
최적화 아치. 무엇보다도 이 옵션은 명령이 실행되는 방식을 제어합니다.
예정된 산술 연산의 인지된 비용. 목록 아치 값
와 동일하다 -XNUMX 월.
이 옵션을 사용하지 않으면 GCC는 다음에서 지정한 프로세서에 대해 최적화합니다. -XNUMX 월. 로
사용 -XNUMX 월 and -mtune 함께 실행되는 코드를 생성하는 것이 가능합니다.
프로세서 제품군이지만 해당 제품군의 특정 구성원에 대한 코드를 최적화합니다.
-mtune 매크로 "_MIPS_TUNE" 및 "_MIPS_TUNE_ 정의푸", 동일한 작업
방법 -XNUMX 월 위에서 설명한 것들.
-밉스1
에 해당 -march=밉스1.
-밉스2
에 해당 -march=밉스2.
-밉스3
에 해당 -march=밉스3.
-밉스4
에 해당 -march=밉스4.
-밉스32
에 해당 -march=밉스32.
-mips32r3
에 해당 -행진=mips32r3.
-mips32r5
에 해당 -행진=mips32r5.
-mips32r6
에 해당 -행진=mips32r6.
-밉스64
에 해당 -march=밉스64.
-mips64r2
에 해당 -행진=mips64r2.
-mips64r3
에 해당 -행진=mips64r3.
-mips64r5
에 해당 -행진=mips64r5.
-mips64r6
에 해당 -행진=mips64r6.
-밉스16
-mno-mips16
MIPS16 코드를 생성(생성하지 않음)합니다. GCC가 MIPS32 또는 MIPS64를 대상으로 하는 경우
아키텍처에서 MIPS16e ASE를 사용합니다.
MIPS16 코드 생성은 다음을 통해 기능별로 제어할 수도 있습니다.
"mips16" 및 "nomips16" 속성.
-mflip-mips16
교대 기능에서 MIPS16 코드를 생성합니다. 이 옵션은 회귀용으로 제공됩니다.
혼합 MIPS16/비 MIPS16 코드 생성 테스트, 일반용이 아닙니다.
사용자 코드를 컴파일하는 데 사용합니다.
-minterlink 압축
-mno-interlink-압축
표준(비압축) MIPS ISA를 사용하는 코드가 링크-
MIPS16 및 microMIPS 코드와 호환되며 그 반대의 경우도 마찬가지입니다.
예를 들어 표준 ISA 인코딩을 사용하는 코드는 MIPS16 또는
마이크로MIPS 코드; 호출 또는 간접 점프를 사용해야 합니다. -minterlink 압축
따라서 GCC가 점프 대상이 아닌 것을 알지 못하는 한 직접 점프를 비활성화합니다.
압축.
-minterlink-mips16
-mno-interlink-mips16
별칭 -minterlink 압축 and -mno-interlink-압축. 이러한 옵션
microMIPS ASE 이전 버전이며 이전 버전과의 호환성을 위해 유지됩니다.
-마비=32
-마비=o64
-마비=n32
-마비=64
-마비=에비
주어진 ABI에 대한 코드를 생성합니다.
EABI에는 32비트 및 64비트 변형이 있습니다. GCC는 일반적으로 64비트를 생성합니다.
64비트 아키텍처를 선택할 때 코드를 -mgp32 32비트 코드를 얻으려면
대신.
O64 ABI에 대한 정보는 다음을 참조하십시오.http://gcc.gnu.org/projects/mipso64-abi.html>.
GCC는 부동 소수점 레지스터가 32가 아닌 o64 ABI의 변형을 지원합니다.
32비트보다 넓습니다. 다음과 같이 이 조합을 선택할 수 있습니다. -마비=32 -mfp64. 이 ABI
"mthc1" 및 "mfhc1" 명령어에 의존하므로 다음과 같은 경우에만 지원됩니다.
MIPS32R2, MIPS32R3 및 MIPS32R5 프로세서.
인수 및 반환 값에 대한 레지스터 할당은 동일하게 유지되지만 각각
스칼라 값은 한 쌍의 64비트가 아닌 단일 32비트 레지스터로 전달됩니다.
레지스터. 예를 들어 스칼라 부동 소수점 값은 $f0 만이 아니라
$f0/$f1 쌍. 호출 저장된 레지스터 세트는 짝수-
번호가 매겨진 배정밀도 레지스터가 저장됩니다.
o32 ABI의 두 가지 추가 변형이 지원되어
32비트 ~ 64비트 레지스터. FPXX(-mfpxx) 및 FP64A(-mfp64
-mno-홀수-spreg). FPXX 확장은 모든 코드가 올바르게 실행되어야 함을 요구합니다.
32비트 또는 64비트 레지스터를 사용하여 실행할 때. 코드는 다음 중 하나와 상호 연결될 수 있습니다.
FP32 또는 FP64(둘 다 아님). FP64A 확장은 FP64 확장과 유사하지만
홀수 단정밀도 레지스터의 사용을 금지합니다. 이것은에서 사용할 수 있습니다
MIPS32R5 프로세서에서 FPU의 "FRE" 모드와 함께 FP32 둘 다 허용
및 FP64A 코드는 FPU 모드를 변경하지 않고 동일한 프로세스에서 상호 연결 및 실행됩니다.
-마비콜
-mno-abicals
SVR4 스타일의 동적 객체에 적합한 코드를 생성(생성하지 않음)합니다.
-마비콜 SVR4 기반 시스템의 기본값입니다.
-m공유
-mno 공유
완전히 위치 독립적인 코드를 생성(생성하지 않음)할 수 있습니다.
따라서 공유 라이브러리에 연결됩니다. 이 옵션은 다음에만 영향을 미칩니다. -마비콜.
All -마비콜 코드는 전통적으로 옵션에 관계없이 위치 독립적이었습니다.
처럼 -fPIC and -fpic. 그러나 확장으로서 GNU 툴체인은 실행 파일을 허용합니다.
로컬 바인딩 기호에 대한 절대 액세스를 사용합니다. 더 짧은 GP를 사용할 수도 있습니다.
초기화 시퀀스를 생성하고 로컬로 정의된 함수에 대한 직접 호출을 생성합니다. 이것
모드는 에 의해 선택됩니다. -mno 공유.
-mno 공유 binutils 2.16 이상에 의존하며 다음과 같은 객체만 생성합니다.
GNU 링커에 의해 연결됩니다. 그러나 옵션은 최종 ABI에 영향을 미치지 않습니다.
실행 가능; 재배치 가능한 개체의 ABI에만 영향을 줍니다. 사용 -mno 공유
일반적으로 실행 파일을 더 작고 빠르게 만듭니다.
-m공유 기본값입니다.
-MPLT
-mno-plt
정적 및 동적 링커가 PLT 및 복사를 지원한다고 가정(가정하지 않음)
재배치. 이 옵션은 다음에만 영향을 미칩니다. -mno 공유 -마비콜. n64 ABI의 경우 이
옵션이 없으면 효과가 없습니다. -msym32.
당신은 할 수 있습니다 -MPLT GCC를 구성하여 기본값 --mips-plt 포함. 기본값
is -mno-plt 그렇지 않으면.
-mxgot
-mno-xgot
전역 오프셋 테이블의 크기에 대한 일반적인 제한을 들어 올립니다(들어 올리지 않음).
GCC는 일반적으로 단일 명령어를 사용하여 GOT에서 값을 로드합니다. 이 동안
상대적으로 효율적이며 GOT가 약 64k보다 작은 경우에만 작동합니다. 아무것
크면 링커가 다음과 같은 오류를 보고하도록 합니다.
맞게 잘린 재배치: R_MIPS_GOT16 foobar
이런 일이 발생하면 다음을 사용하여 코드를 다시 컴파일해야 합니다. -mxgot. 이것은 매우
코드가 덜 효율적이지만 큰 GOT는 세
전역 기호의 값을 가져오는 명령.
일부 링커는 여러 GOT를 생성할 수 있습니다. 이러한 링커가 있는 경우
만 사용해야합니다 -mxgot 단일 개체 파일이 64k 이상의 파일에 액세스할 때
GOT 항목의 가치. 아주 소수만이 할 수 있습니다.
이러한 옵션은 GCC가 위치 독립 코드를 생성하지 않는 한 아무 효과가 없습니다.
-mgp32
범용 레지스터의 너비가 32비트라고 가정합니다.
-mgp64
범용 레지스터의 너비가 64비트라고 가정합니다.
-mfp32
부동 소수점 레지스터의 너비가 32비트라고 가정합니다.
-mfp64
부동 소수점 레지스터의 너비가 64비트라고 가정합니다.
-mfpxx
부동 소수점 레지스터의 너비를 가정하지 마십시오.
-mhard-float
부동 소수점 보조 프로세서 명령어를 사용합니다.
-msoft-float
부동 소수점 보조 프로세서 명령어를 사용하지 마십시오. 부동 소수점 구현
대신 라이브러리 호출을 사용하여 계산합니다.
-mno-float
에 해당 -msoft-float, 그러나 추가로 컴파일 중인 프로그램이
부동 소수점 연산을 수행하지 않습니다. 이 옵션은 현재 지원됩니다
특별한 세트를 선택할 수 있는 일부 베어메탈 MIPS 구성에 의해서만
모든 부동 소수점 지원이 없는 라이브러리(예: 부동 소수점
포인트 "printf" 형식). 코드가 다음으로 컴파일된 경우 -mno-float 실수로 포함
부동 소수점 연산의 경우 링크 타임 또는 런타임 오류가 발생할 수 있습니다.
-msingle-float
부동 소수점 보조 프로세서가 단정밀도 연산만 지원한다고 가정합니다.
-m더블 플로트
부동 소수점 보조 프로세서가 배정밀도 연산을 지원한다고 가정합니다. 이것
기본값입니다.
-modd-spreg
-mno-홀수-spreg
o32에 대해 홀수 단정밀도 부동 소수점 레지스터 사용을 활성화합니다.
아비. 이것은 이러한 레지스터를 지원하는 것으로 알려진 프로세서의 기본값입니다.
o32 FPXX ABI를 사용할 때, -mno-홀수-spreg 기본적으로 설정되어 있습니다.
-맙스=2008
-mabs=레거시
이러한 옵션은 특수 NaN(숫자 아님) IEEE 754의 처리를 제어합니다.
"abs.프티" 그리고 "네.프티" 기계 지침.
기본적으로 또는 언제 -mabs=레거시 레거시 처리가 선택되어 사용됩니다. 이에
이러한 명령이 산술로 간주되고 올바른 작동이 피하는 경우
필수이며 입력 피연산자는 NaN일 수 있습니다. 더 긴 명령 시퀀스
부동 소수점 데이터의 부호 비트를 수동으로 조작하는 것이 대신 사용됩니다.
전에, - 유한 수학 전용 옵션도 지정되었습니다.
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 -맙스=2008 옵션은 IEEE 754-2008 처리를 선택합니다. 이 경우 이들
명령어는 산술적이지 않은 것으로 간주되므로 모든 명령에서 올바르게 작동합니다.
특히 입력 피연산자가 NaN인 경우를 포함합니다. 이 지침
따라서 항상 해당 작업에 사용됩니다.
-mnan=2008
-mnan=레거시
이러한 옵션은 특수 NaN(숫자 아님) IEEE 754의 인코딩을 제어합니다.
부동 소수점 데이터.
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 -mnan=레거시 옵션은 레거시 인코딩을 선택합니다. 이 경우 조용한 NaN(qNaN)
후행 유효 필드의 첫 번째 비트가 0인 반면
시그널링 NaN(sNaN)은 후행 유효 숫자의 첫 번째 비트로 표시됩니다.
필드는 1입니다.
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 -mnan=2008 옵션은 IEEE 754-2008 인코딩을 선택합니다. 이 경우 qNaN은
후행 유효 필드의 첫 번째 비트가 1인 반면 sNaN은
후행 유효 필드의 첫 번째 비트가 0으로 표시됩니다.
디폴트는 -mnan=레거시 GCC가 다음으로 구성되지 않은 경우 --with-nan=2008.
-mllsc
-mno-llsc
사용(사용하지 않음) ll, sc및 동기화 원자 메모리 내장 구현 지침
기능. 두 옵션이 모두 지정되지 않은 경우 GCC는 대상이 다음과 같은 경우 지침을 사용합니다.
아키텍처가 그들을 지원합니다.
-mllsc 런타임 환경이 지침을 에뮬레이트할 수 있고 -mno-llsc
비표준 ISA용으로 컴파일할 때 유용할 수 있습니다. 두 옵션 중 하나를 만들 수 있습니다.
기본적으로 GCC를 구성하여 ---llsc 포함 and --llsc 없이 각각.
---llsc 포함 일부 구성의 기본값입니다. 설치 문서 참조
를 참조하세요
-mdsp
-mno-dsp
MIPS DSP ASE의 개정판 1을 사용(사용하지 마십시오).
이 옵션은 전처리기 매크로 "__mips_dsp"를 정의합니다. 그것은 또한 정의
"__mips_dsp_rev"를 1로 변경합니다.
-MDSPR2
-mno-dspr2
MIPS DSP ASE의 개정판 2을 사용(사용하지 마십시오).
이 옵션은 전처리기 매크로 "__mips_dsp" 및 "__mips_dspr2"를 정의합니다. 그것
또한 "__mips_dsp_rev"를 2로 정의합니다.
-msmartmips
-mno-smartmips
MIPS SmartMIPS ASE를 사용(사용하지 마십시오).
-mpaired-단일
-mno 쌍 단일
쌍을 이루는 단일 부동 소수점 명령어를 사용합니다(사용하지 않음).
이 옵션을 사용하려면 하드웨어 부동 소수점 지원이 활성화되어야 합니다.
-mdmx
-mno-mdmx
MIPS 디지털 미디어 확장 지침을 사용합니다(사용하지 않음). 이 옵션은
64비트 코드를 생성할 때 사용되며 하드웨어 부동 소수점 지원이 필요합니다.
사용하도록 설정되었습니다.
-mips3d
-mno-mips3d
MIPS-3D ASE를 사용하십시오(사용하지 마십시오). 옵션 -mips3d 의미하다 -mpaired-단일.
-mmmicromips
-mno-micromip
microMIPS 코드를 생성(생성하지 않음)합니다.
MicroMIPS 코드 생성은 다음을 통해 기능별로 제어할 수도 있습니다.
"micromips" 및 "nomicromips" 속성.
-mmt
-mno-mt
MT 멀티스레딩 명령어를 사용합니다(사용하지 않음).
-mmcu
-mno-mcu
MIPS MCU ASE 명령어를 사용(사용하지 마십시오).
-메바
-mno-에바
MIPS 향상된 가상 주소 지정 지침을 사용합니다(사용하지 않음).
-mvirt
-mno-virt
MIPS 가상화 응용 프로그램별 지침을 사용(사용하지 않음)합니다.
-mxpa
-mno-xpa
MIPS XPA(eXtended Physical Address) 지침을 사용(사용하지 않음)합니다.
-mlong64
"긴" 유형을 64비트 너비로 강제 설정합니다. 보다 -mlong32 기본값에 대한 설명
포인터 크기가 결정되는 방식.
-mlong32
"long", "int" 및 포인터 유형을 32비트 너비로 강제 설정합니다.
"int", "long" 및 포인터의 기본 크기는 ABI에 따라 다릅니다. 모든
지원되는 ABI는 32비트 "int"를 사용합니다. n64 ABI는 64비트와 마찬가지로 64비트 "long"을 사용합니다.
에비; 나머지는 32비트 "long"을 사용합니다. 포인터는 "long"과 크기가 같거나
정수 레지스터와 같은 크기 중 더 작은 것.
-msym32
-mno-sym32
선택한 기호에 관계없이 모든 기호에 32비트 값이 있다고 가정(가정하지 않음)
아비. 이 옵션은 다음과 함께 사용하면 유용합니다. -마비=64 and -mno-abicals 때문에
GCC는 기호 주소에 대한 더 짧고 빠른 참조를 생성할 수 있습니다.
-G NUM
데이터가 없는 경우 외부에서 볼 수 있는 데이터의 정의를 작은 데이터 섹션에 넣습니다.
보다 큰 NUM 바이트. 그러면 GCC는 데이터에 대한 보다 효율적인 액세스를 생성할 수 있습니다. 보다
-mgpopt 를 참조하세요
기본값은 -G 옵션은 구성에 따라 다릅니다.
-mlocal-sdata
-mno-로컬-sdata
연장(연장하지 않음) -G 정적 변수와 같은 로컬 데이터에도 동작
C. -mlocal-sdata 모든 구성의 기본값입니다.
링커가 응용 프로그램이 너무 많은 작은 데이터를 사용하고 있다고 불평하는 경우
성능에 덜 중요한 부품을 -mno-로컬-sdata. 당신
로 큰 라이브러리를 구축할 수도 있습니다. -mno-로컬-sdata, 그래서 라이브러리는
메인 프로그램을 위한 더 많은 공간을 남겨두십시오.
-mextern-sdata
-mno-외부-sdata
다음과 같은 경우 외부 정의 데이터가 작은 데이터 섹션에 있다고 가정(가정하지 않음)
해당 데이터의 크기는 -G 한도. -mextern-sdata 모두의 기본값입니다
구성.
모듈을 컴파일하면 방법 과 -mextern-sdata -G NUM -mgpopt및 방법 참조
변수 바르 그보다 크지 않다 NUM 다음을 확인해야 합니다. 바르 배치되다
작은 데이터 섹션에서. 만약에 바르 다른 모듈에 의해 정의된 경우 다음 중 하나를 컴파일해야 합니다.
충분히 높은 모듈 -G "섹션" 속성 설정 또는 첨부 바르's
정의. 만약에 바르 일반적이므로 응용 프로그램을 충분히 높은 -G
환경.
이러한 제한 사항을 충족하는 가장 쉬운 방법은 모든 모듈을 컴파일하고 연결하는 것입니다.
같은과 -G 옵션. 그러나 다음을 지원하는 라이브러리를 구축할 수 있습니다.
여러 다른 작은 데이터 제한. 라이브러리를 컴파일하여 이 작업을 수행할 수 있습니다.
가장 높은 지원 -G 설정 및 추가 사용 -mno-외부-sdata 중지하려면
라이브러리는 외부 정의 데이터에 대해 가정하지 않습니다.
-mgpopt
-mno-gpopt
작은 데이터에 있는 것으로 알려진 기호에 대해 GP 관련 액세스 사용(사용하지 않음)
부분; 보다 -G, -mlocal-sdata and -mextern-sdata. -mgpopt 모두의 기본값입니다
구성.
-mno-gpopt $gp 레지스터가 다음 값을 보유하지 않을 수 있는 경우에 유용합니다.
"_gp". 예를 들어 코드가 부팅에 사용될 수 있는 라이브러리의 일부인 경우
모니터에서 부트 모니터 루틴을 호출하는 프로그램은 $gp에서 알 수 없는 값을 전달합니다. (에
이러한 상황에서 부트 모니터 자체는 일반적으로 다음과 같이 컴파일됩니다. -G0.)
-mno-gpopt 의미하다 -mno-로컬-sdata and -mno-외부-sdata.
-포함된 데이터
-mno-embedded-데이터
가능한 경우 먼저 읽기 전용 데이터 섹션에 변수를 할당한 다음
가능하면 작은 데이터 섹션, 그렇지 않으면 데이터에서. 이것은 약간 느린 코드를 제공합니다
기본값보다 크지만 실행할 때 필요한 RAM의 양이 줄어들므로
일부 임베디드 시스템에서 선호됩니다.
-muninit-const-in-rodata
-mno-unit-const-in-rodata
읽기 전용 데이터 섹션에 초기화되지 않은 "const" 변수를 넣습니다. 이 옵션은
와 함께만 의미 있는 -포함된 데이터.
-mcode 판독 가능=설정
GCC가 실행 가능한 섹션에서 읽는 코드를 생성할 수 있는지 여부를 지정합니다. 있다
세 가지 가능한 설정:
-mcode-readable=예
지침은 실행 가능한 섹션에 자유롭게 액세스할 수 있습니다. 이것이 기본 설정입니다.
-mcode-판독 가능=pcrel
MIPS16 PC 기준 로드 명령은 실행 가능한 섹션에 액세스할 수 있지만 다른
지시는 그렇게 해서는 안 됩니다. 이 옵션은 4KSc 및 4KSd 프로세서에서 유용합니다.
코드 TLB에 읽기 금지 비트가 설정되어 있을 때. 프로세서에서도 유용합니다.
이중 명령/데이터 SRAM 인터페이스를 갖도록 구성할 수 있으며,
M4K와 마찬가지로 PC 관련 로드를 명령 RAM으로 자동 리디렉션합니다.
-mcode 판독 가능=아니요
지침은 실행 가능한 섹션에 액세스해서는 안 됩니다. 이 옵션은 다음에서 유용할 수 있습니다.
이중 명령/데이터 SRAM 인터페이스를 갖도록 구성된 대상이지만
(M4K와 달리) PC 관련 부하를 자동으로 리디렉션하지 않습니다.
명령어 램.
-msplit 주소
-mno-분할 주소
"%hi()" 및 "%lo()" 어셈블러 재배치 연산자의 사용을 활성화(비활성화)합니다. 이것
옵션이 다음으로 대체되었습니다. -mexplicit-relocs 그러나 뒤로 유지됩니다.
호환성.
-mexplicit-relocs
-mno-명시적-relocs
기호 주소를 처리할 때 어셈블러 재배치 연산자를 사용합니다(사용하지 않음).
에서 선택한 대안 -mno-명시적-relocs, 대신 어셈블러 매크로를 사용하는 것입니다.
-mexplicit-relocs GCC가 다음을 수행하는 어셈블러를 사용하도록 구성된 경우 기본값입니다.
재배치 연산자를 지원합니다.
-mcheck-XNUMX 나눗셈
-mno-check-zero-division
XNUMX으로 정수 나누기를 트랩(트랩하지 않음)합니다.
디폴트는 -mcheck-XNUMX 나눗셈.
-mdivide-트랩
-mdivide-break
MIPS 시스템은 조건부 트랩 또는
휴식 지시. 트랩을 사용하면 코드가 작아지지만 MIPS에서만 지원됩니다.
II 이후. 또한 일부 Linux 커널 버전에는 트랩을 방지하는 버그가 있습니다.
적절한 신호("SIGFPE")를 생성하지 않습니다. 사용하다 -mdivide-트랩 조건부 허용
이를 지원하는 아키텍처의 함정과 -mdivide-break 강제로 사용
휴식.
기본값은 일반적으로 -mdivide-트랩, 그러나 이것은 구성할 때 재정의될 수 있습니다.
사용 --with-divide=나누기. 다음을 사용하여 XNUMX으로 나누기 검사를 완전히 비활성화할 수 있습니다.
-mno-check-zero-division.
-mmemcpy
-mno-memcpy
중요하지 않은 블록 이동에 "memcpy"를 강제로 사용합니다(강제하지 않음). 기본값은
-mno-memcpy, 이를 통해 GCC는 대부분의 일정한 크기의 복사본을 인라인할 수 있습니다.
-mlong-통화
-mno-long-통화
"jal" 명령어 사용을 비활성화(비활성화하지 않음)합니다. "jal"을 사용하여 함수 호출
더 효율적이지만 호출자와 수신자가 동일한 256MB에 있어야 합니다.
세그먼트.
이 옵션은 abcalls 코드에 영향을 주지 않습니다. 기본값은 -mno-long-통화.
-mmad
-mno-mad
"mad", "madu" 및 "mul" 명령어의 사용을 활성화(비활성화)합니다.
R4650 이사.
-마마드
-mno-imadd
"madd" 및 "msub" 정수 명령어 사용을 활성화(비활성화)합니다. 기본값은
-마마드 74k를 제외하고 "madd" 및 "msub"를 지원하는 아키텍처에서
더 느린 코드를 생성하는 것으로 밝혀진 아키텍처입니다.
-머퓨즈드-매드
-mno-융합-매드
부동 소수점 곱하기 누산 명령어의 사용을 활성화(비활성화)합니다.
사용할 수 있습니다. 기본값은 -머퓨즈드-매드.
R8000 CPU에서 곱셈 누산 명령어를 사용할 때 중간
제품은 무한정 정밀도로 계산되며 FCSR 플러시 대상이 아닙니다.
제로 비트. 이것은 어떤 상황에서는 바람직하지 않을 수 있습니다. 다른 프로세서에서
결과는 별도의 곱셈을 사용하는 등가 계산과 수치적으로 동일하며,
명령을 더하고, 빼고, 부정합니다.
-nocpp
사용자 어셈블러 파일에 대해 전처리기를 실행하지 않도록 MIPS 어셈블러에 지시합니다(
.s 접미사) 조립할 때.
-mfix-24k
-mno-fix-24k
24K E48(충전 중 매장 데이터 손실) 오류를 해결하십시오. 해결 방법
GCC가 아닌 어셈블러에 의해 구현됩니다.
-mfix-r4000
-mno-fix-r4000
특정 R4000 CPU 에라타 해결:
- 더블 워드 또는 변수 시프트를 실행하면 잘못된 결과가 나타날 수 있습니다.
정수 나누기를 시작한 직후.
- 더블 워드 또는 변수 시프트는 실행하는 동안 잘못된 결과를 줄 수 있습니다.
정수 곱셈이 진행 중입니다.
- 정수 나누기는 의 지연 슬롯에서 시작하면 잘못된 결과를 줄 수 있습니다.
취한 지점 또는 점프.
-mfix-r4400
-mno-fix-r4400
특정 R4400 CPU 에라타 해결:
- 더블 워드 또는 변수 시프트를 실행하면 잘못된 결과가 나타날 수 있습니다.
정수 나누기를 시작한 직후.
-mfix-r10000
-mno-fix-r10000
특정 R10000 에라타 해결:
- "ll"/"sc" 시퀀스는 3.0 이전 버전에서 원자적으로 작동하지 않을 수 있습니다. 그들은 아마도
개정판 2.6 및 이전 버전에서 교착 상태가 발생했습니다.
이 옵션은 대상 아키텍처가 분기 가능성을 지원하는 경우에만 사용할 수 있습니다.
도움말을 참조하십시오. -mfix-r10000 기본값은 다음과 같습니다. -10000월=rXNUMX 사용; -mno-fix-r10000
그렇지 않으면 기본값입니다.
-mfix-rm7000
-mno-fix-rm7000
RM7000 "dmult"/"dmultu" 오류를 해결하십시오. 해결 방법은 다음과 같이 구현됩니다.
GCC가 아닌 어셈블러.
-mfix-vr4120
-mno-fix-vr4120
특정 VR4120 정오표 해결:
- "dmultu"가 항상 올바른 결과를 생성하는 것은 아닙니다.
- "div" 및 "ddiv"는 피연산자 중 하나가
부정적이다.
분할 정오표에 대한 해결 방법은 다음의 특수 기능에 의존합니다. libgcc.a. 에
현재 이러한 기능은 "mips64vr*-elf" 구성에서만 제공됩니다.
다른 VR4120 정오표는 특정 쌍 사이에 NOP를 삽입해야 합니다.
지침. 이러한 정오표는 GCC 자체가 아니라 어셈블러에서 처리합니다.
-mfix-vr4130
VR4130 "mflo"/"mfhi" 오류를 해결하십시오. 해결 방법은
GCC가 아닌 어셈블러이지만 GCC가 "mflo" 및 "mfhi"를 사용하지 않는 경우
VR4130 "macc", "macchi", "dmacc" 및 "dmacchi" 명령어를 대신 사용할 수 있습니다.
-mfix-sb1
-mno-fix-sb1
특정 SB-1 CPU 코어 오류를 해결하십시오. (이 플래그는 현재 SB-1 주변에서 작동합니다.
개정 2 "F1" 및 "F2" 부동 소수점 정오표.)
-mr10k-캐시-배리어=설정
GCC가 다음의 부작용을 피하기 위해 캐시 장벽을 삽입해야 하는지 여부를 지정합니다.
R10K 프로세서에 대한 추측.
많은 프로세서와 마찬가지로 R10K는 조건부 결과를 예측하려고 시도합니다.
분기하고 추측적으로 "취한" 분기의 명령을 실행합니다. 나중에
예측된 결과가 잘못된 경우 이러한 명령을 중단합니다. 그러나 R10K에서는
중단된 명령에도 부작용이 있을 수 있습니다.
이 문제는 커널 저장소에만 영향을 미치며 시스템에 따라 커널 로드에 영향을 줍니다.
예를 들어, 투기적으로 실행된 저장소는 대상 메모리를 캐시에 로드할 수 있습니다.
저장소 자체가 나중에 중단되더라도 캐시 라인을 더티로 표시합니다. DMA라면
작업은 "더티" 라인이 플러시되기 전에 동일한 메모리 영역에 기록합니다.
캐시된 데이터는 DMA 기반 데이터를 덮어씁니다. 전체 내용은 R10K 프로세서 설명서를 참조하십시오.
다른 잠재적인 문제를 포함한 설명.
한 가지 해결 방법은 모든 메모리 액세스 전에 캐시 배리어 명령을 삽입하는 것입니다.
투기적으로 실행될 수 있으며 중단되더라도 부작용이 있을 수 있습니다.
-mr10k-캐시-배리어=설정 이 해결 방법의 GCC 구현을 제어합니다. 그것
다음 영역의 바이트에 대한 중단된 액세스에는 측면이 없다고 가정합니다.
효과 :
1. 현재 함수의 스택 프레임이 차지하는 메모리
2. 들어오는 스택 인수가 차지하는 메모리;
3. 링크 시간 상수 주소를 가진 객체가 차지하는 메모리.
이러한 영역에 대한 추측적 액세스를 보장하는 것은 커널의 책임입니다.
실제로 안전합니다.
입력 프로그램에 다음과 같은 함수 선언이 포함된 경우:
무효 foo(무효);
그런 다음 "foo"의 구현은 "j foo" 및 "jal foo"가 실행되도록 허용해야 합니다.
추측으로. GCC는 자체 컴파일하는 함수에 대해 이 제한을 준수합니다. 그것
GCC가 아닌 함수(예: 손으로 작성한 어셈블리 코드)도 동일한 작업을 수행할 것으로 예상합니다.
옵션에는 세 가지 형식이 있습니다.
-mr10k-cache-barrier=로드-스토어
추측에 따라 실행될 수 있는 로드 또는 저장 앞에 캐시 장벽을 삽입합니다.
중단하더라도 부작용이 있을 수 있습니다.
-mr10k-cache-barrier=저장
투기적으로 실행될 수 있는 저장소 앞에 캐시 장벽을 삽입하고
중단하더라도 부작용이 있을 수 있습니다.
-mr10k-cache-barrier=없음
캐시 배리어 삽입을 비활성화합니다. 이것이 기본 설정입니다.
-mflush-func=펑크
-mno-플러시-펑크
I 및 D 캐시를 플러시하거나 이러한 캐시를 호출하지 않도록 호출할 함수를 지정합니다.
기능. 호출되는 경우 함수는 공통 인수와 동일한 인수를 취해야 합니다.
"_flush_func", 즉 캐시가 저장되는 메모리 범위의 주소입니다.
flushed, 메모리 범위의 크기, 숫자 3(두 캐시를 모두 플러시하기 위해). NS
기본값은 대상 GCC가 구성된 대상에 따라 다르지만 일반적으로 다음 중 하나입니다.
"_flush_func" 또는 "__cpu_flush".
mbranch 비용 =NUM
분기 비용을 대략적으로 설정 NUM "간단한" 지침. 이 비용은 단지
발견적이며 릴리스 간에 일관된 결과를 생성한다고 보장되지 않습니다. 제로
비용은 중복으로 기본값을 선택합니다. -mtune 환경.
-mbranch 가능성이 있는
-mno-branch-like
기본값에 관계없이 분기 가능성이 있는 명령어의 사용을 활성화 또는 비활성화합니다.
선택한 아키텍처. 기본적으로 다음과 같은 경우 분기 가능성 지침이 생성될 수 있습니다.
선택한 아키텍처에서 지원됩니다. MIPS32 및
MIPS64 아키텍처 및 이러한 아키텍처를 구현하는 프로세서 그들을 위해,
분기 가능성이 있는 명령어는 MIPS32 및
MIPS64 아키텍처는 특히 사용을 권장하지 않습니다.
-mfp-예외
-mno-fp-예외
FP 예외가 사용 가능한지 여부를 지정합니다. 이것은 FP 명령어가 어떻게 작동하는지에 영향을 미칩니다.
일부 프로세서에 대해 예정되어 있습니다. 기본값은 FP 예외가 활성화된 것입니다.
예를 들어, SB-1에서 FP 예외가 비활성화되고 64비트
코드를 입력하면 두 FP 파이프를 모두 사용할 수 있습니다. 그렇지 않으면 하나의 FP 파이프만 사용할 수 있습니다.
-mvr4130-정렬
-mno-vr4130-정렬
VR4130 파이프라인은 양방향 슈퍼스칼라이지만 두 개의 명령어만 발행할 수 있습니다.
첫 번째 것이 8바이트로 정렬된 경우 함께. 이 옵션이 활성화되면 GCC는
병렬로 실행되어야 한다고 생각하는 명령어 쌍.
이 옵션은 VR4130에 최적화할 때만 효과가 있습니다. 일반적으로 코드를 만듭니다.
더 빠르지만 더 크게 만드는 대가를 치러야 합니다. 기본적으로 활성화되어 있습니다.
최적화 수준 -O3.
-msynci
-mno-synci
지원하는 아키텍처에서 "synci" 명령어 생성을 활성화(비활성화)합니다.
"__builtin__clear_cache"가 활성화되면 "synci" 명령어(활성화된 경우)가 생성됩니다.
컴파일.
이 옵션은 기본적으로 -mno-synci, 그러나 기본값은 다음을 구성하여 재정의할 수 있습니다.
GCC --synci와 함께.
단일 프로세서 시스템용 코드를 컴파일할 때 일반적으로 "synci"를 사용하는 것이 안전합니다.
그러나 많은 다중 코어(SMP) 시스템에서 명령을 무효화하지 않습니다.
모든 코어에 캐시되어 정의되지 않은 동작이 발생할 수 있습니다.
-mrelax-픽-콜
-mno-relax-pic-calls
일반적으로 $25 레지스터를 통해 전달되는 PIC 호출을 직접 호출로 전환하십시오.
이는 링커가 링크 타임에 대상을 확인할 수 있고 다음과 같은 경우에만 가능합니다.
대상이 직접 호출 범위 내에 있습니다.
-mrelax-픽-콜 GCC가 어셈블러와
".reloc" 어셈블리 지시문을 지원하는 링커 및 -mexplicit-relocs 에
효과. 와 함께 -mno-명시적-relocs, 이 최적화는
컴파일러의 도움 없이 어셈블러와 링커만 사용할 수 있습니다.
-mmcount-ra-주소
-mno-mcount-ra-주소
"_mcount"가 호출 함수의 반환을 수정할 수 있도록 하는 코드를 내보냅니다(내보내지 않음).
주소. 활성화되면 이 옵션은 새 인터페이스로 일반적인 "_mcount" 인터페이스를 확장합니다.
주소 "intptr_t *" 유형이 있고 레지스터 $12에 전달되는 매개변수입니다.
"_mcount"는 다음을 모두 수행하여 반환 주소를 수정할 수 있습니다.
* 레지스터 $31의 새 주소 반환.
* "*에 새 주소 저장주소"만약 주소 null이 아닙니다.
디폴트는 -mno-mcount-ra-주소.
엠믹스 옵션
이러한 옵션은 MMIX에 대해 정의됩니다.
-mlibfuncs
-mno-libfuncs
내장 라이브러리 함수가 컴파일 중임을 지정하고 모든 값을
크기에 관계없이 레지스터.
-멤실론
-mno-엡실론
"rE"와 관련하여 비교하는 부동 소수점 비교 명령어 생성
엡실론 레지스터.
-마비=mmixware
-마비=누
함수 매개변수를 전달하는 코드를 생성하고 (호출된
함수)는 전역 레지스터를 사용하는 GNU ABI와 달리 $0 이상의 레지스터로 간주됩니다.
$231 이상을 등록합니다.
-mzero 확장
-mno-제로 확장
64비트보다 짧은 크기의 메모리에서 데이터를 읽을 때 XNUMX을 사용(사용하지 않음)
부호 확장이 아닌 기본적으로 로드 명령을 확장합니다.
-mknuthdiv
-mno-knuthdiv
나머지를 산출하는 나눗셈의 결과가 제수와 같은 부호를 갖도록 합니다.
기본값으로, -mno-knuthdiv, 나머지 기호는 다음 기호를 따릅니다.
피제수. 두 방법 모두 산술적으로 유효하며 후자는 거의 독점적입니다.
익숙한.
-mtoplevel-심볼
-mno-toplevel-기호
앞에 추가(앞에 추가하지 않음) : 어셈블리 코드를 사용할 수 있도록 모든 전역 기호에
"PREFIX" 어셈블리 지시문을 사용합니다.
-멜프
기본값이 아닌 ELF 형식으로 실행 파일 생성 mmo 에서 사용하는 형식
전에, 믹스 모의 실험 장치.
-mbranch 예측
-mno-분기-예측
정적 분기 예측 시 가능한 분기 명령어를 사용(사용하지 않음)
가능한 분기를 나타냅니다.
-mbase 주소
-mno-base-주소
다음을 사용하는 코드 생성(생성하지 않음) 기지 구애. 기본 주소 사용
자동으로 요청(어셈블러와 링커에서 처리)을 생성합니다.
전역 레지스터에 설정할 상수입니다. 레지스터는 하나 이상의 베이스에 사용됩니다.
레지스터에 있는 값에서 0에서 255 사이의 주소 요청. NS
일반적으로 짧고 빠른 코드로 이어지지만,
제한적으로 처리할 수 있습니다. 이것은 많은 정적 데이터를 사용하는 프로그램을 의미합니다.
필요할 수 있습니다 -mno-base-주소.
-ms단일 종료
-mno-단일 종료
생성된 코드가 각 함수에 단일 종료 지점을 갖도록 강제(강제하지 않음)합니다.
MN10300 옵션
Bowman의 -m 옵션은 Matsushita MN10300 아키텍처에 대해 정의됩니다.
- 복합 버그
MN10300 프로세서에 대한 곱셈 명령어의 버그를 방지하기 위해 코드를 생성합니다.
이것이 기본값입니다.
-mno-multi-bug
MN10300에 대한 곱하기 명령어의 버그를 피하기 위해 코드를 생성하지 마십시오.
프로세서.
-mam33
AM33 프로세서에 특정한 기능을 사용하여 코드를 생성합니다.
-mno-am33
AM33 프로세서에 특정한 기능을 사용하여 코드를 생성하지 마십시오. 이것이
태만.
-mam33-2
AM33/2.0 프로세서에 특정한 기능을 사용하여 코드를 생성합니다.
-mam34
AM34 프로세서에 특정한 기능을 사용하여 코드를 생성합니다.
-mtune=CPU 유형
명령을 스케줄링할 때 표시된 CPU 유형의 타이밍 특성을 사용하십시오.
대상 프로세서 유형은 변경되지 않습니다. CPU 유형은 다음 중 하나여야 합니다.
mn10300, am33, 오전33-2 or am34.
-mreturn-포인터-on-d0
포인터를 반환하는 함수를 생성할 때 "a0"과 "aXNUMX" 모두에 포인터를 반환합니다.
"d0". 그렇지 않으면 포인터는 "a0"에서만 반환되고 이러한 호출을 시도합니다.
프로토타입이 없는 함수는 오류를 발생시킵니다. 이 옵션은
기본; 사용하다 -mno-return-pointer-on-d0 그것을 해제하십시오.
-mno-crt0
C 런타임 초기화 개체 파일에 연결하지 마십시오.
-mrelax
이완 최적화 전달을 수행해야 함을 링커에 표시합니다.
분기, 호출 및 절대 메모리 주소를 줄입니다. 이 옵션은 효과만 있습니다
최종 링크 단계의 명령줄에서 사용되는 경우.
이 옵션은 심볼릭 디버깅을 불가능하게 만듭니다.
-밀리
컴파일러가 생성하도록 허용 긴 교수 워드 대상이 다음과 같은 경우 지침
AM33 또는 나중에. 이것이 기본값입니다. 이 옵션은 전처리기 매크로를 정의합니다.
"__LIW__".
-mnoliw
컴파일러가 생성하도록 허용하지 않음 긴 교수 워드 지침. 이 옵션
전처리기 매크로 "__NO_LIW__"를 정의합니다.
-msetlb
컴파일러가 SETLB and LCC 대상이 다음과 같은 경우 지침
AM33 또는 나중에. 이것이 기본값입니다. 이 옵션은 전처리기 매크로를 정의합니다.
"__SETLB__".
-mnosetlb
컴파일러가 생성하도록 허용하지 않음 SETLB or LCC 지침. 이 옵션은 다음을 정의합니다.
전처리기 매크로 "__NO_SETLB__".
용감 옵션
-메브
빅 엔디안 코드를 생성합니다. 에 대한 기본값입니다. 목시-*-* 구성.
-멜
리틀 엔디안 코드를 생성합니다.
-mmul.x
mul.x 및 umul.x 명령어를 생성합니다. 에 대한 기본값입니다. 목시박스-*-*
구성.
-mno-crt0
C 런타임 초기화 개체 파일에 연결하지 마십시오.
MSP430 옵션
다음 옵션은 MSP430에 대해 정의됩니다.
-masm-hex
어셈블리 출력이 항상 XNUMX진수 상수를 사용하도록 합니다. 일반적으로 이러한 상수는 부호가 있습니다.
소수이지만 이 옵션은 testsuite 및/또는 미적 목적으로 사용할 수 있습니다.
-mmcu=
대상 MCU를 선택합니다. 이것은 다음을 기반으로 C 전처리기 기호를 만드는 데 사용됩니다.
MCU 이름, 대문자로 변환 및 __. 이 차례로
에 의해 사용됩니다 msp430.h MCU별 추가 헤더를 선택하기 위한 헤더 파일
파일.
이 옵션은 사용할 ISA도 설정합니다. MCU 이름이 자신에게만 알려진 이름인 경우
430 ISA를 지원하면 그것이 선택되고, 그렇지 않으면 430X ISA가 선택됩니다. NS
일반 MCU 이름 msp430 430 ISA를 선택하는 데 사용할 수도 있습니다. 마찬가지로
일반적인 msp430x MCU 이름은 430X ISA를 선택합니다.
또한 MCU별 링커 스크립트가 링커 명령줄에 추가됩니다. NS
스크립트 이름은 MCU의 이름입니다. .ld 추가됨. 따라서 지정 -mmcu=xxx on
전에, GCC 명령줄은 C 전처리기 기호 "__XXX__"를 정의하고 링커가
라는 스크립트를 검색하려면 xxx.ld.
이 옵션은 어셈블러에도 전달됩니다.
-mcpu =
사용할 ISA를 지정합니다. 허용되는 값은 msp430, msp430x and msp430xv2. 이
옵션은 더 이상 사용되지 않습니다. NS -mmcu= 옵션을 사용하여 ISA를 선택해야 합니다.
-msim
시뮬레이터 런타임 라이브러리 및 링커 스크립트에 연결합니다. 다음을 수행하는 모든 스크립트를 재정의합니다.
에 의해 선택될 것입니다. -mmcu= 옵션을 선택합니다.
-대형
대형 모델 주소 지정(20비트 포인터, 32비트 "size_t")을 사용합니다.
-m작은
소형 모델 주소 지정(16비트 포인터, 16비트 "size_t")을 사용합니다.
-mrelax
이 옵션은 어셈블러와 링커에 전달되며 링커가 수행할 수 있도록 합니다.
최종 링크까지 수행할 수 없는 특정 최적화.
mhwmult=
대상에서 지원하는 다중 하드웨어 유형을 설명합니다. 허용되는 값은
없음 하드웨어 증식이 없는 경우, 16bit 원래 16비트 전용 곱셈 지원
초기 MCU에 의해 32bit 최신 MCU에서 지원하는 16/32비트 곱셈 및 f5시리즈
F16 시리즈 MCU에서 지원하는 32/5비트 곱셈용. 값 자동 또한 될 수 있습니다
주어진. 이것은 GCC가 MCU 이름을 기반으로 하드웨어 곱셈 지원을 추론하도록 지시합니다.
제공 한 -mmcu 옵션. 그렇지 않은 경우 -mmcu 옵션이 지정된 다음 32bit 하드웨어
곱하기 지원이 가정됩니다. 자동 기본 설정입니다.
하드웨어 곱셈은 일반적으로 라이브러리 루틴을 호출하여 수행됩니다. 이것은 저장
생성된 코드의 공백 에서 컴파일할 때 -O3 이상 그러나 하드웨어
승수는 인라인으로 호출됩니다. 이것은 더 크지만 더 빠른 코드를 만듭니다.
하드웨어 곱셈 루틴은 실행 중 인터럽트를 비활성화하고 복원합니다.
완료될 때 이전 인터럽트 상태. 이렇게 하면 내부에서 안전하게 사용할 수 있습니다.
인터럽트 핸들러와 일반 코드.
-민트
최소 런타임 환경 사용 가능 - 정적 이니셜라이저 없음 또는
생성자. 이것은 메모리가 제한된 장치를 위한 것입니다. 컴파일러에는 다음이 포함됩니다.
링커와 런타임에 코드 조각을 알려주는 일부 개체의 특수 기호
필요합니다.
NDS32 옵션
다음 옵션은 NDS32 구현에 대해 정의됩니다.
-mbig-엔디안
빅 엔디안 모드에서 코드를 생성합니다.
-미리틀 엔디안
리틀 엔디안 모드에서 코드를 생성합니다.
-mreduced-regs
레지스터 할당을 위해 축소 세트 레지스터를 사용하십시오.
-mfull-regs
레지스터 할당을 위해 전체 세트 레지스터를 사용하십시오.
-mcmov
조건부 이동 지침을 생성합니다.
-mno-cmov
조건부 이동 명령을 생성하지 마십시오.
-mperf-ext
성능 확장 지침을 생성합니다.
-mno-perf-ext
성능 확장 지침을 생성하지 마십시오.
-mv3push
v3 push25/pop25 명령어를 생성합니다.
-mno-v3push
v3 push25/pop25 명령어를 생성하지 마십시오.
-m16비트
16비트 명령어를 생성합니다.
-mno-16비트
16비트 명령어를 생성하지 마십시오.
-misr-벡터-크기=NUM
4 또는 16이어야 하는 각 인터럽트 벡터의 크기를 지정합니다.
-mcache-블록 크기=NUM
각 캐시 블록의 크기를 지정합니다. 이 크기는 2에서 4 사이의 512의 거듭제곱이어야 합니다.
-행진=아치
대상 아키텍처의 이름을 지정합니다.
-mc모델=코드 모델
코드 모델을 다음 중 하나로 설정합니다.
작은
모든 데이터 및 읽기 전용 데이터 세그먼트는 512KB 주소 지정 공간 내에 있어야 합니다.
텍스트 세그먼트는 16MB 주소 지정 공간 내에 있어야 합니다.
매질
데이터 세그먼트는 512KB 이내여야 하며 읽기 전용 데이터 세그먼트는
4GB 주소 공간 내. 텍스트 세그먼트는 여전히 16MB 이내여야 합니다.
주소 공간.
넓은
모든 텍스트 및 데이터 세그먼트는 4GB 주소 지정 공간 내에 있을 수 있습니다.
-mctor-dtor
생성자/소멸자 기능을 활성화합니다.
-mrelax
지침을 완화하는 가이드 링커.
니오스 II 옵션
Altera Nios II 프로세서에 대해 정의된 옵션입니다.
-G NUM
전역 및 정적 개체를 다음보다 작거나 같음 NUM 작은 데이터로 바이트 또는
일반 데이터 또는 BSS 섹션 대신 BSS 섹션. 기본값 NUM is
8.
-mgpopt=option
-mgpopt
-mno-gpopt
GP 관련 액세스를 생성합니다(생성하지 않음). 다음과 같은 option 이름은
인식:
없음
GP 관련 액세스를 생성하지 마십시오.
지방의
외부 또는
약한. 또한 명시적으로 지정된 개체에 대해 GP 상대 주소 지정을 사용합니다.
"섹션" 속성을 통해 작은 데이터 섹션에 배치됩니다.
글로벌
~에 관해서는 지방의, 그러나 또한 작은 데이터 개체에 대한 GP 관련 액세스를 생성합니다.
외적이거나 약하다. 이 옵션을 사용하는 경우 다음의 모든 부분이
귀하의 프로그램(라이브러리 포함)은 동일한 파일로 컴파일됩니다. -G 환경.
데이터
프로그램의 모든 데이터 개체에 대한 GP 관련 액세스를 생성합니다. 사용하는 경우
이 옵션을 사용하면 프로그램의 전체 데이터 및 BSS 세그먼트가 64K에 맞아야 합니다.
메모리 및 적절한 링커 스크립트를 사용하여 메모리 내에 할당해야 합니다.
전역 포인터의 주소 지정 가능 범위.
모든 함수 포인터와 데이터 포인터에 대한 GP 상대 주소를 생성합니다. 만약에
이 옵션을 사용하면 프로그램의 전체 텍스트, 데이터 및 BSS 세그먼트가
64K 메모리에 적합하며 적절한 링커 스크립트를 사용하여
전역 포인터의 주소 지정 가능한 범위 내에 있습니다.
-mgpopt 에 해당하는 -mgpopt=로컬및 -mno-gpopt 에 해당하는 -mgpopt=없음.
디폴트는 -mgpopt 때를 제외하고 -fpic or -fPIC 위치를 생성하도록 지정됩니다.
독립 코드. Nios II ABI는 GP 관련 액세스를 허용하지 않습니다.
공유 라이브러리.
지정해야 할 수도 있습니다. -mno-gpopt 다음을 포함하는 프로그램을 빌드할 때 명시적으로
큰 GOT 데이터 섹션을 포함한 많은 양의 작은 데이터. 이 경우,
GP 상대 주소 지정을 위한 16비트 오프셋은 액세스를 허용할 만큼 충분히 크지 않을 수 있습니다.
전체 작은 데이터 섹션.
-멜
-메브
리틀 엔디안(기본값) 또는 빅 엔디안(실험) 코드를 각각 생성합니다.
-mbypass-캐시
-mno 우회 캐시
I/O 변형을 사용하여 모든 로드 및 저장 명령이 항상 캐시를 우회하도록 합니다.
지시 사항. 기본값은 캐시를 우회하지 않는 것입니다.
-mno-캐시-휘발성
-mcache-휘발성
휘발성 메모리 액세스는 로드 및 저장의 I/O 변형을 사용하여 캐시를 우회합니다.
지침. 기본값은 캐시를 우회하지 않는 것입니다.
-mno-빠른-sw-div
-mfast-sw-div
작은 숫자에 대해 테이블 기반 빠른 나누기를 사용하지 마십시오. 기본값은 빠른
나누다 -O3 이상.
-mno-hw-물
-mhw-물
-mno-hw-mux
-mhw-mux
-mno-hw-div
-mhw-div
"mul", "mulx" 및 "div" 명령어 제품군을 사용하거나 사용하지 않도록 설정합니다.
컴파일러. 기본값은 "mul"을 내보내고 "div" 및 "mulx"를 내보내지 않는 것입니다.
-엠커스텀-여관=N
-mno-커스텀-여관
각각의 -엠커스텀-여관=N 옵션을 사용하면 인코딩과 함께 사용자 지정 명령어를 사용할 수 있습니다. N 언제
사용하는 코드 생성 여관. 예를 들어, -mcustom-fadds=253 커스텀 생성
대신 단정밀도 부동 소수점 추가 연산을 위한 명령어 253
라이브러리 호출을 사용하는 기본 동작.
다음 값 여관 지원됩니다. 달리 명시된 경우를 제외하고 부동 소수점
작업은 일반적인 IEEE 754 의미 체계로 구현될 것으로 예상되며
C 연산자 또는 이에 상응하는 GCC 내장 함수에 직접 대응합니다.
단정밀도 부동 소수점:
유행, fsub, fdiv, fmuls
이진 산술 연산.
네그
단항 부정.
팹
단항 절대값.
fcmpeq, fcmpges, fmpgts, fcmples, fcmplts, fmpnes
비교 작업.
분당, fmax
부동 소수점 최소 및 최대. 이 지침은 다음과 같은 경우에만 생성됩니다.
- 유한 수학 전용 이 지정됩니다.
fsqrts
단항 제곱근 연산.
fcos, fsin, 프탄, 파탄, 펙스, 플록스
부동 소수점 삼각 및 지수 함수. 이러한 지침은
경우에만 생성 -재미있는 수학 최적화 도 지정됩니다.
배정밀도 부동 소수점:
패드, fsubd, fdivd, 곰팡이
이진 산술 연산.
fnegd
단항 부정.
팹즈
단항 절대값.
fcmpeqd, fcmpged, fmpgtd, fcmled, fcmpltd, fmpned
비교 작업.
마음, fmaxd
배정밀도 최소값 및 최대값. 이 지침은 다음과 같은 경우에만 생성됩니다.
- 유한 수학 전용 이 지정됩니다.
fsqrtd
단항 제곱근 연산.
fcosd, fsind, 피트, 파탄드, fexpd, 채찍질
배정도 삼각 및 지수 함수. 이러한 지침은
경우에만 생성 -재미있는 수학 최적화 도 지정됩니다.
전환 :
섹스
단정밀도에서 배정밀도로의 변환.
ftruncd
배정밀도에서 단정밀도로 변환.
픽시, 수정, 고정, 픽스
부동 소수점에서 부호 있는 또는 부호 없는 정수 유형으로의 변환,
XNUMX으로 잘림.
반올림
단정밀도 부동 소수점에서 부호 있는 정수로 변환, 반올림
가장 가까운 정수이며 XNUMX에서 멀어집니다. 이는 해당
"__builtin_lroundf" 함수 -fno-수학-errno 사용.
플로티스, 플로터스, 떠다니는, 플로트
부호 있는 또는 부호 없는 정수 유형에서 부동 소수점 유형으로의 변환.
또한 내부 레지스터 X 및 Y에 대한 다음 전송 명령은 모두
배정밀도 부동 소수점 명령어를 사용하려면 제공해야 합니다.
두 개의 배정밀도 소스 피연산자를 사용하는 사용자 지정 명령어는 첫 번째 피연산자를 예상합니다.
64비트 레지스터 X의 피연산자. 다른 피연산자(또는 단항의 유일한 피연산자
연산)은 가장 중요하지 않은 사용자 정의 산술 명령어에 제공됩니다.
소스 레지스터의 절반 srcxnumx 그리고 가장 중요한 절반 srcxnumx. 사용자 지정
배정밀도 결과를 반환하는 명령어는 가장 중요한 32를 반환합니다.
대상 레지스터의 비트와 32비트 레지스터의 나머지 절반 Y. GCC
레지스터 X 쓰기 및/또는 읽기에 필요한 코드 시퀀스를 자동으로 생성
배정도 부동 소수점 명령어가 사용되는 경우 Y를 등록합니다.
fwrx
쓰다 srcxnumx X의 최하위 절반으로 srcxnumx 가장 중요한
X의 절반.
날렵한
쓰다 srcxnumx Y로.
frdxhi, frdxlo
X의 최대 또는 최소(각각) 중요한 절반을 읽고 저장합니다. 목적지.
프레디
Y 값을 읽고 저장 목적지.
Nios II 사용자 정의 생성에 대해 더 많은 로컬 제어 권한을 얻을 수 있습니다.
"target("custom-인스 = N")" 및 "target("사용자 지정 없음-여관")"
함수 속성 또는 프라그마.
-mcustom-fpu-cfg=name
이 옵션은 미리 정의되고 명명된 사용자 지정 명령어 인코딩 집합을 활성화합니다(참조
-엠커스텀-여관 위에). 현재 다음 세트가 정의되어 있습니다.
-mcustom-fpu-cfg=60-1 다음과 같습니다. -mcustom-fmuls=252 -mcustom-fadds=253
-mcustom-fssubs=254 -fsingle-precision-상수
-mcustom-fpu-cfg=60-2 다음과 같습니다. -mcustom-fmuls=252 -mcustom-fadds=253
-mcustom-fssubs=254 -mcustom-fdivs=255 -fsingle-precision-상수
-mcustom-fpu-cfg=72-3 다음과 같습니다. -mcustom-floatus=243 -mcustom-fixsi=244
-mcustom-floatis=245 -mcustom-fcmpgts=246 -mcustom-fcmple=249 -mcustom-fcmpeqs=250
-mcustom-fcmpnes=251 -mcustom-fmuls=252 -mcustom-fadds=253 -mcustom-fssubs=254
-mcustom-fdivs=255 -fsingle-precision-상수
개인이 제공하는 맞춤형 지침 할당 -엠커스텀-여관= 옵션 재정의
에 의해 주어진 것들 -mcustom-fpu-cfg=, 옵션의 순서에 관계없이
명령 행.
다음을 통해 FPU 구성 선택에 대해 더 많은 로컬 제어 권한을 얻을 수 있습니다.
"target("custom-fpu-cfg=이름")" 함수 속성 또는 프라그마.
이러한 추가 -m Altera Nios II ELF(베어메탈) 타겟에 사용할 수 있는 옵션:
-말
HAL BSP와 연결합니다. 이렇게 하면 GCC 제공 C 런타임 시작과의 연결이 억제됩니다.
및 종료 코드이며 일반적으로 다음과 함께 사용됩니다. -msys-crt0= 지정하다
HAL BSP에서 제공하는 대체 시작 코드의 위치입니다.
-msmallc
C 라이브러리의 제한된 버전과 링크, -lsmallc, 대신 Newlib.
-msys-crt0=시작 파일
시작 파일 링크할 때 사용할 시작 파일(crt0)의 파일 이름입니다. 이 옵션
와 함께만 유용합니다. -말.
-msys-lib=시스템 라이브러리
시스템 라이브러리 저수준 시스템 호출을 제공하는 라이브러리의 라이브러리 이름입니다.
예를 들어 "읽기" 및 "쓰기"와 같이 C 라이브러리에서 필요합니다. 이 옵션은 일반적으로
HAL BSP에서 제공하는 라이브러리와 연결합니다.
엔비디아 PTX 옵션
다음 옵션은 Nvidia PTX에 대해 정의됩니다.
-m32
-m64
32비트 또는 64비트 ABI용 코드를 생성합니다.
-mmainkernel
__main 커널용 코드에 링크합니다. 오프로딩이 아닌 독립 실행형입니다.
실행.
PDP-11 옵션
다음 옵션은 PDP-11에 대해 정의됩니다.
-mfpu
하드웨어 FPP 부동 소수점을 사용합니다. 이것이 기본값입니다. (FIS 부동 소수점
PDP-11/40은 지원하지 않습니다.)
-msoft-float
하드웨어 부동 소수점을 사용하지 마십시오.
-mac0
부동 소수점 결과를 ac0(Unix 어셈블러 구문의 fr0)으로 반환합니다.
-mno-ac0
메모리에 부동 소수점 결과를 반환합니다. 이것이 기본값입니다.
-m40
PDP-11/40용 코드를 생성합니다.
-m45
PDP-11/45용 코드를 생성합니다. 이것이 기본값입니다.
-m10
PDP-11/10용 코드를 생성합니다.
-mbcopy 내장
메모리 복사에 인라인 "movmemhi" 패턴을 사용합니다. 이것이 기본값입니다.
-mbcopy
메모리 복사에 인라인 "movmemhi" 패턴을 사용하지 마십시오.
-민트16
-mno-int32
16비트 "int"를 사용합니다. 이것이 기본값입니다.
-민트32
-mno-int16
32비트 "int"를 사용합니다.
-mfloat64
-mno-float32
64비트 "부동"을 사용합니다. 이것이 기본값입니다.
-mfloat32
-mno-float64
32비트 "부동"을 사용합니다.
-맛시
"abshi2" 패턴을 사용합니다. 이것이 기본값입니다.
-mno-abshi
"abshi2" 패턴을 사용하지 마십시오.
-mbranch-비싼
가지가 비싼 척하십시오. 이것은 코드 생성을 실험하기 위한 것입니다.
로 작성되어야 합니다.
-mbranch-저렴한
가지가 비싼 척하지 마십시오. 이것이 기본값입니다.
-munix-asm
Unix 어셈블러 구문을 사용합니다. 에 대해 구성된 경우 기본값입니다. pdp11-*-bsd.
-mdec-asm
DEC 어셈블러 구문을 사용합니다. 이것은 모든 PDP-11 대상에 대해 구성된 경우 기본값입니다.
이외의 pdp11-*-bsd.
피코칩 옵션
Bowman의 -m 옵션은 PicoChip 구현에 대해 정의됩니다.
-매=ae_type
어레이에 대한 명령어 세트, 레지스터 세트 및 명령어 스케줄링 매개변수 설정
요소 유형 ae_type. 지원되는 값 ae_type are 이 중 하나를 이용하세요, MUL및 맥.
-매=ANY 완전히 일반적인 AE 유형을 선택합니다. 이 옵션으로 생성된 코드 실행
다른 AE 유형 중 하나에서. 코드는 컴파일된 경우만큼 효율적이지 않습니다.
특정 AE 유형에 대해 일부 유형의 연산(예: 곱셈)이 작동하지 않음
모든 유형의 AE에서 제대로 작동합니다.
-매=MUL MUL AE 유형을 선택합니다. 이것은 컴파일된 코드에 가장 유용한 AE 유형입니다.
및 기본값입니다.
-매=맥 DSP 스타일의 MAC AE를 선택합니다. 이 옵션으로 컴파일된 코드는 다음과 같은 문제를 겪을 수 있습니다.
DSP AE가 제공하지 않기 때문에 바이트(char) 조작의 열악한 성능
바이트 로드/저장에 대한 하드웨어 지원.
-msymbol-주소
컴파일러가 로드/저장에서 주소로 기호 이름을 직접 사용할 수 있도록 합니다.
레지스터에 먼저 로드하지 않고 명령. 일반적으로 이 사용
옵션은 옵션을 사용하지 않을 때보다 더 빠르게 실행되는 더 큰 프로그램을 생성합니다.
단, 프로그램마다 결과가 다르기 때문에 사용자 선택사항으로 남겨두고,
영구적으로 활성화되는 것이 아니라
-mno-inefficiency-warnings
비효율적인 코드 생성에 대한 경고를 비활성화합니다. 이러한 경고는
예를 들어 바이트 수준 메모리 작업을 수행하는 코드를 컴파일할 때 생성됩니다.
MAC AE 유형에서. MAC AE는 바이트 수준 메모리에 대한 하드웨어 지원이 없습니다.
모든 바이트 로드/저장은 워드 로드/저장에서 합성되어야 합니다.
작업. 이는 비효율적이며 다음을 나타내는 경고가 생성됩니다.
바이트 연산을 피하거나
필요한 하드웨어 지원. 이 옵션은 이러한 경고를 비활성화합니다.
PowerPC 옵션
이들은 아래에 나열됩니다
RL78 옵션
-msim
시뮬레이터 내에서 작업을 지원하기 위한 추가 대상 라이브러리의 링크.
-mmul=없음
-mmul=g13
-mmul=rl78
사용할 하드웨어 곱셈 지원 유형을 지정합니다. 기본값은
없음, 소프트웨어 곱셈 기능을 사용합니다. NS g13 옵션은
하드웨어는 RL78/G13 타겟에서만 주변 장치를 곱하거나 나눕니다. NS rl78 옵션은
RL78 소프트웨어 매뉴얼에 정의된 표준 하드웨어 곱셈용.
-m64bit-더블
-m32bit-더블
"이중" 데이터 유형을 64비트(-m64bit-더블) 또는 32비트(-m32bit-더블)
크기에. 기본값은 -m32bit-더블.
IBM RS/6000 and PowerPC 옵션
Bowman의 -m 옵션은 IBM RS/6000 및 PowerPC에 대해 정의됩니다.
-mpowerpc-gpopt
-mno-powerpc-gpopt
-mpowerpc-gfxopt
-mno-powerpc-gfxopt
-mpowerpc64
-mno-powerpc64
-mmfcrf
-mno-mfcrf
-mpopcntb
-mno-popcntb
-mpopcntd
-mno-popcntd
-mfprnd
-mno-fprnd
-mcmpb
-mno-cmpb
-mmfpgpr
-mno-mfpgpr
-mhard-dfp
-mno-하드-dfp
이 옵션을 사용하여 프로세서에서 사용할 수 있는 명령을 지정합니다.
사용하고 있습니다. 이러한 옵션의 기본값은 GCC를 구성할 때 결정됩니다.
지정 -mcpu =CPU_유형 이러한 옵션의 사양을 재정의합니다. 우리
당신이 사용하는 것이 좋습니다 -mcpu =CPU_유형 위에 나열된 옵션이 아닌 옵션입니다.
지정 -mpowerpc-gpopt GCC가 옵션인 PowerPC 아키텍처를 사용할 수 있도록 합니다.
부동 소수점 제곱근을 포함한 범용 그룹의 명령어.
지정 -mpowerpc-gfxopt GCC가 옵션인 PowerPC 아키텍처를 사용할 수 있도록 합니다.
부동 소수점 선택을 포함한 그래픽 그룹의 명령어.
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 -mmfcrf 옵션을 사용하면 GCC가 조건 레지스터 필드에서 이동을 생성할 수 있습니다.
POWER4 프로세서 및 지원하는 기타 프로세서에서 구현된 명령
PowerPC V2.01 아키텍처. NS -mpopcntb 옵션을 사용하면 GCC가 팝카운트를 생성할 수 있습니다.
POWER5에 구현된 배정밀도 FP 역추정 명령어
PowerPC V2.02 아키텍처를 지원하는 프로세서 및 기타 프로세서. NS
-mpopcntd 옵션을 사용하면 GCC에서 구현된 popcount 명령을 생성할 수 있습니다.
PowerPC V7 아키텍처를 지원하는 POWER2.06 프로세서 및 기타 프로세서.
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 -mfprnd 옵션을 사용하면 GCC가 FP를 정수로 반올림하는 명령어를 생성할 수 있습니다.
POWER5+ 프로세서 및 PowerPC를 지원하는 기타 프로세서에서 구현
V2.03 아키텍처. NS -mcmpb 옵션을 사용하면 GCC가 비교 바이트를 생성할 수 있습니다.
POWER6 프로세서 및 지원하는 기타 프로세서에서 구현된 명령
PowerPC V2.05 아키텍처. NS -mmfpgpr 옵션을 사용하면 GCC가 FP 이동을 생성할 수 있습니다.
POWER6X 프로세서에 구현된 범용 레지스터 명령어 및
확장된 PowerPC V2.05 아키텍처를 지원하는 다른 프로세서. NS -mhard-dfp
옵션을 사용하면 GCC에서 구현된 XNUMX진수 부동 소수점 명령어를 생성할 수 있습니다.
일부 POWER 프로세서.
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 -mpowerpc64 옵션을 사용하면 GCC가 추가 64비트 명령어를 생성할 수 있습니다.
전체 PowerPC64 아키텍처에서 찾을 수 있으며 GPR을 64비트, 더블워드로 처리합니다.
수량. GCC는 기본적으로 -mno-powerpc64.
-mcpu =CPU_유형
아키텍처 유형, 레지스터 사용 및 명령어 스케줄링 매개변수 설정
기계 유형 CPU_유형. 지원되는 값 CPU_유형 are 401, 403, 405, 405fp, 440,
440fp, 464, 464fp, 476, 476fp, 505, 601, 602, 603, 603e, 604, 604e, 620, 630, 740,
7400, 7450, 750, 801, 821, 823, 860, 970, 8540, a2, e300c2, e300c3, e500mc, e500mc64,
e5500, e6500, EC603e, G3, G4, G5, 타이탄, power3, power4, power5, 파워5+, power6,
파워6x, power7, power8, 전원, 파워 pc64, 파워 pc64le및 rs64.
-mcpu=파워PC, -mcpu=powerpc64및 -mcpu=powerpc64le 순수 32비트 PowerPC 지정
(둘 중 하나), 64비트 빅 엔디안 PowerPC 및 64비트 리틀 엔디안 PowerPC
적절한 일반 프로세서 모델이 있는 아키텍처 머신 유형
스케줄링 목적.
다른 옵션은 특정 프로세서를 지정합니다. 해당 옵션에서 생성된 코드
해당 프로세서에서 가장 잘 실행되며 다른 프로세서에서는 전혀 실행되지 않을 수 있습니다.
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 -mcpu options는 다음 옵션을 자동으로 활성화하거나 비활성화합니다.
-말티벡 -mfprnd -mhard-float -mmfcrf -m다중 -mpopcntb -mpopcntd -mpowerpc64
-mpowerpc-gpopt -mpowerpc-gfxopt -msingle-float -m더블 플로트 -ms단순-fpu -mstring
-mmulhw -mdlmzb -mmfpgpr -mvsx -mcrypto -mdirect-이동 -mpower8-퓨전
-mpower8-벡터 -mquad-메모리 -mquad-메모리-원자
특정 CPU에 대해 설정된 특정 옵션은 컴파일러 버전에 따라 다릅니다.
어떤 설정이 해당 CPU에 대한 최적의 코드를 생성하는지에 따라; 그것은하지 않습니다
반드시 실제 하드웨어의 기능을 반영해야 합니다. 설정을 원하시면
개별 옵션을 특정 값으로 지정하려면 -mcpu 선택권,
처럼 -mcpu=970 -mno-altivec.
AIX에서는 -말티벡 and -mpowerpc64 옵션은 -mcpu
AIX는 이러한 옵션을 완벽하게 지원하지 않기 때문에 현재 옵션입니다. 당신은 할 수있다
여전히 작동할 것이라고 확신하는 경우 개별적으로 활성화하거나 비활성화합니다.
환경을 제공합니다.
-mtune=CPU_유형
머신 유형에 대한 명령어 스케줄링 매개변수 설정 CPU_유형, 그러나 설정하지 마십시오
아키텍처 유형 또는 레지스터 사용 -mcpu =CPU_유형 하다. 에 대한 동일한 값
CPU_유형 에 사용된다 -mtune 에 관해서 -mcpu. 둘 다 지정하면 생성된 코드
에 의해 설정된 아키텍처 및 레지스터를 사용합니다. -mcpu, 그러나 에 의해 설정된 스케줄링 매개변수
-mtune.
-mcmodel=작은
소형 모델용 PowerPC64 코드 생성: TOC는 64k로 제한됩니다.
-mcmodel=중간
중형 모델에 대한 PowerPC64 코드 생성: TOC 및 기타 정적 데이터가 작동 중일 수 있습니다.
총 4G 크기입니다.
-mcmodel=대형
대형 모델에 대한 PowerPC64 코드 생성: TOC의 크기는 최대 4G일 수 있습니다. 다른
데이터와 코드는 64비트 주소 공간에 의해서만 제한됩니다.
-말티벡
-mno-altivec
AltiVec 명령어를 사용하는(사용하지 않는) 코드 생성 및 사용 가능
AltiVec 명령어 세트에 대한 보다 직접적인 액세스를 허용하는 내장 함수.
설정해야 할 수도 있습니다. -마비=알티벡 AltiVec ABI로 현재 ABI 조정
향상.
인셀덤 공식 판매점인 -말티벡 보다는 사용된다 -maltivec=르 or -maltivec=베, 요소 순서
"vec_splat", "vec_extract" 및 "vec_insert" 일치와 같은 Altivec 내장 함수의 경우
대상의 엔디안(endianness)에 해당하는 배열 요소 순서입니다. 즉, 요소
XNUMX은 빅 엔디안을 대상으로 할 때 벡터 레지스터에서 가장 왼쪽 요소를 식별합니다.
플랫폼을 대상으로 할 때 벡터 레지스터에서 가장 오른쪽 요소를 식별합니다.
리틀 엔디안 플랫폼.
-maltivec=베
여부에 관계없이 빅 엔디안 요소 순서를 사용하여 Altivec 명령어를 생성합니다.
대상은 빅 엔디안 또는 리틀 엔디안입니다. 빅 엔디안을 타겟팅할 때의 기본값입니다.
플랫폼입니다.
요소 순서는 다음과 같은 Altivec 내장 함수에서 요소 번호를 해석하는 데 사용됩니다.
"vec_splat", "vec_extract" 및 "vec_insert". 기본적으로 이러한 일치 배열 요소는
대상에 대한 엔디안(endianness)에 해당하는 순서.
-maltivec=르
여부에 관계없이 리틀 엔디안 요소 순서를 사용하여 Altivec 명령어를 생성합니다.
대상은 빅 엔디안 또는 리틀 엔디안입니다. 약간 타겟팅할 때의 기본값입니다.
엔디안 플랫폼. 이 옵션은 현재 빅 엔디안을 타겟팅할 때 무시됩니다.
플랫폼입니다.
요소 순서는 다음과 같은 Altivec 내장 함수에서 요소 번호를 해석하는 데 사용됩니다.
"vec_splat", "vec_extract" 및 "vec_insert". 기본적으로 이러한 일치 배열 요소는
대상에 대한 엔디안(endianness)에 해당하는 순서.
-mvrsave
-mno-vrsave
AltiVec 코드를 생성할 때 VRSAVE 명령어를 생성합니다.
-mgen-cell-마이크로코드
Cell 마이크로코드 명령어를 생성합니다.
-mwarn-cell-마이크로코드
Cell 마이크로코드 명령이 발생하면 경고합니다. Cell 마이크로코드의 예
명령어는 가변 시프트입니다.
-msecure-plt
허용하는 코드 생성 ld and ld.so 실행 파일 및 공유 라이브러리 빌드
실행할 수 없는 ".plt" 및 ".got" 섹션. 이것은 PowerPC 32비트 SYSV ABI 옵션입니다.
-mbss-plt
BSS ".plt" 섹션을 사용하는 코드 생성 ld.so 채우고 ".plt"가 필요합니다.
쓰기 가능하고 실행 가능한 ".got" 섹션. 이것은 PowerPC 32비트입니다.
SYSV ABI 옵션.
-미젤
-mno-isel
이 스위치는 ISEL 명령어 생성을 활성화하거나 비활성화합니다.
-미젤=예 아니오
이 스위치는 더 이상 사용되지 않습니다. 사용하다 -미젤 and -mno-isel 대신.
-mspe
-mno-sp
이 스위치는 SPE simd 명령어 생성을 활성화하거나 비활성화합니다.
-짝이 된
-mno 쌍
이 스위치는 PAIRED simd 명령어 생성을 활성화하거나 비활성화합니다.
-mspe=예 아니오
이 옵션은 더 이상 사용되지 않습니다. 사용하다 -mspe and -mno-sp 대신.
-mvsx
-mno-vsx
벡터/스칼라(VSX) 명령어를 사용하는(사용하지 않는) 코드를 생성합니다.
VSX에 대한 보다 직접적인 액세스를 허용하는 내장 기능의 사용을 활성화합니다.
명령어 세트.
-mcrypto
-mno-암호화
직접 액세스를 허용하는 내장 기능의 사용을 활성화(비활성화)
PowerPC ISA 버전 2.07에 추가된 암호화 명령.
-mdirect-이동
-mno-직접 이동
명령을 사용하는(사용하지 않는) 코드를 생성하여
범용 레지스터 및 에 추가된 벡터/스칼라(VSX) 레지스터
PowerPC ISA 버전 2.07.
-mpower8-퓨전
-mno-power8-퓨전
일부 정수 연산을 인접하게 유지(유지하지 않음)하는 코드를 생성하여
명령은 power8 이상 프로세서에서 함께 융합될 수 있습니다.
-mpower8-벡터
-mno-power8-벡터
벡터 및 스칼라 명령어를 사용(사용하지 않음)하는 코드를 생성합니다.
PowerPC ISA 버전 2.07에 추가되었습니다. 또한 내장 기능을 사용하도록 설정
벡터 명령어에 보다 직접적으로 액세스할 수 있습니다.
-mquad-메모리
-mno 쿼드 메모리
비원자 쿼드 워드 메모리 명령어를 사용하는(사용하지 않는) 코드를 생성합니다.
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 -mquad-메모리 옵션을 사용하려면 64비트 모드를 사용해야 합니다.
-mquad-메모리-원자
-mno-쿼드-메모리-원자
원자 쿼드 워드 메모리 명령어를 사용하는(사용하지 않는) 코드를 생성합니다. NS
-mquad-메모리-원자 옵션을 사용하려면 64비트 모드를 사용해야 합니다.
-mupper-regs-df
-mno-upper-regs-df
스칼라 배정밀도 명령어를 사용(사용하지 않음)하는 코드를 생성합니다.
벡터/스칼라 부동 소수점 레지스터 세트의 모든 64개 레지스터를 대상으로 합니다.
PowerPC ISA 버전 2.06에 추가되었습니다. -mupper-regs-df 다음과 같은 경우 기본적으로 켜져 있습니다.
당신은 중 하나를 사용 -mcpu=파워7, -mcpu=파워8및 -mvsx 옵션을 제공합니다.
-mupper-regs-sf
-mno-upper-regs-sf
스칼라 단정밀도 명령어를 사용(사용하지 않음)하는 코드를 생성합니다.
벡터/스칼라 부동 소수점 레지스터 세트의 모든 64개 레지스터를 대상으로 합니다.
PowerPC ISA 버전 2.07에 추가되었습니다. -mupper-regs-sf 다음과 같은 경우 기본적으로 켜져 있습니다.
당신은 중 하나를 사용 -mcpu=파워8 or -mpower8-벡터 옵션을 제공합니다.
-mupper-regs
-mno-상위-regs
64개 모두를 대상으로 하는 스칼라 명령어를 사용(사용하지 않음)하는 코드 생성
의 모델에 따라 벡터/스칼라 부동 소수점 레지스터 세트의 레지스터
기계.
경우 -mno-상위-regs 옵션을 사용하면 둘 다 꺼집니다. -mupper-regs-sf and
-mupper-regs-df 옵션을 제공합니다.
-mfloat-gprs=예/싱글/더블/아니요
-mfloat-gprs
이 스위치는 부동 소수점 연산 생성을 활성화하거나 비활성화합니다.
이를 지원하는 아키텍처용 범용 레지스터.
논쟁 거리 예 or 단일 단정밀도 부동 소수점 사용 가능
작업.
논쟁 거리 더블 단정밀도 및 배정밀도 부동 소수점 사용 가능
작업.
논쟁 거리 아니 범용 레지스터에서 부동 소수점 연산을 비활성화합니다.
이 옵션은 현재 MPC854x에서만 사용할 수 있습니다.
-m32
-m64
Darwin 및 SVR32 대상의 64비트 또는 4비트 환경용 코드 생성(포함
GNU/리눅스). 32비트 환경은 int, long 및 포인터를 32비트로 설정하고
모든 PowerPC 변형에서 실행되는 코드를 생성합니다. 64비트 환경은 int를 다음으로 설정합니다.
32비트 및 long 및 64비트에 대한 포인터, 다음과 같이 PowerPC64용 코드 생성
-mpowerpc64.
-mfull-toc
-mno-fp-in-toc
-mno-합계-목차
-최소-toc
모든 항목에 대해 생성되는 TOC(목차) 생성 수정
실행 가능 파일. NS -mfull-toc 옵션이 기본적으로 선택되어 있습니다. 이 경우 GCC는
각 고유한 비자동 변수 참조에 대해 하나 이상의 TOC 항목을 할당합니다.
당신의 프로그램. GCC는 또한 TOC에 부동 소수점 상수를 배치합니다. 다만,
16,384개의 항목이 TOC에 있습니다.
사용 가능한 리소스를 오버플로했다는 링커 오류 메시지가 표시되는 경우
TOC 공간, 당신은 함께 사용되는 TOC 공간의 양을 줄일 수 있습니다 -mno-fp-in-toc and
-mno-합계-목차 옵션을 제공합니다. -mno-fp-in-toc GCC가 부동 소수점을 넣는 것을 방지합니다.
목차의 상수 및 -mno-합계-목차 GCC가 계산을 위해 코드를 생성하도록 합니다.
그 합계를 TOC에 넣는 대신 런타임에 주소와 상수의 합계.
이 옵션 중 하나 또는 둘 다를 지정할 수 있습니다. 각각은 GCC가 매우
TOC 공간을 절약하는 대신 약간 더 느리고 더 큰 코드.
이 두 옵션을 모두 지정했는데도 목차의 공간이 부족하면
지정하다 -최소-toc 대신에. 이 옵션을 사용하면 GCC가 다음 항목에 대해 하나의 TOC 항목만
모든 파일. 이 옵션을 지정하면 GCC는 더 느리고 더 큰 코드를 생성합니다.
그러나 매우 적은 TOC 공간을 사용합니다. 이 옵션은 다음에서만 사용할 수 있습니다.
덜 자주 실행되는 코드를 포함하는 파일.
-maix64
-maix32
64비트 AIX ABI 및 호출 규칙 사용: 64비트 포인터, 64비트 "long" 유형 및
그들을 지원하는 데 필요한 인프라. 지정 -maix64 의미하다 -mpowerpc64,
동안 -maix32 64비트 ABI를 비활성화하고 -mno-powerpc64. GCC는 기본적으로
-maix32.
-mxl-호환
-mno-xl-컴패트
AIX-
호환 가능한 ABI. 부동 소수점 인수를 다음을 넘어 프로토타입된 함수에 전달
인수 FPR 외에 스택에 저장 영역(RSA)을 등록합니다. 가정하지 마십시오
128비트 long double 값에서 가장 중요한 double은 다음과 같은 경우 적절하게 반올림됩니다.
값을 비교하고 double로 변환합니다. long double에 XL 기호 이름 사용
루틴을 지원합니다.
AIX 호출 규칙이 확장되었지만 처음에는 처리하도록 문서화되지 않았습니다.
인수의 주소를 취하는 함수를 호출하는 모호한 K&R C 사례
선언된 것보다 적은 인수. IBM XL 컴파일러는 부동 소수점 인수에 액세스합니다.
서브루틴이 다음 없이 컴파일될 때 스택의 RSA에 맞지 않습니다.
최적화. 스택에 부동 소수점 인수를 항상 저장하는 것은
비효율적이고 거의 필요하지 않은 이 옵션은 기본적으로 활성화되어 있지 않습니다.
최적화 없이 IBM XL 컴파일러에 의해 컴파일된 서브루틴을 호출할 때 필요합니다.
-mp
고객 지원 IBM RS/6000 SP 평행 환경 (체육). 사용하도록 작성된 응용 프로그램 연결
응용 프로그램을 실행할 수 있도록 특수 시작 코드와 함께 메시지를 전달합니다. NS
시스템에는 표준 위치(/usr/lpp/ppe.poe/), 아니면 그
명세서 파일은 다음으로 재정의되어야 합니다. -사양= 적절한 지정 옵션
디렉토리 위치. 병렬 환경은 스레드를 지원하지 않으므로 -mp
옵션과 -pthread 옵션이 호환되지 않습니다.
-악성 - 자연
-악의력
AIX, 32비트 Darwin 및 64비트 PowerPC GNU/Linux에서 옵션 -악성 - 자연
부동 소수점 double과 같은 더 큰 유형의 ABI 정의 정렬을 재정의합니다.
자연 크기 기반 경계에서. 옵션 -악의력 GCC에 지시
ABI 지정 정렬 규칙을 따릅니다. GCC는 기본적으로 표준 정렬을 사용합니다.
ABI에 정의되어 있습니다.
64비트 Darwin에서는 자연 정렬이 기본값이며 -악의력 하지 않습니다
지원.
-msoft-float
-mhard-float
부동 소수점 레지스터 세트를 사용(사용)하지 않는 코드를 생성합니다. 소프트웨어
사용하는 경우 부동 소수점 에뮬레이션이 제공됩니다. -msoft-float 옵션을 선택하고 통과
링크할 때 GCC에 옵션.
-msingle-float
-m더블 플로트
단정밀도 또는 배정밀도 부동 소수점 연산을 위한 코드를 생성합니다.
-m더블 플로트 의미하다 -msingle-float.
-ms단순-fpu
하드웨어 부동 소수점 단위에 대해 "sqrt" 및 "div" 명령어를 생성하지 마십시오.
-mfpu=name
부동 소수점 단위의 유형을 지정합니다. 유효한 값 name are sp_lite 에 (동등한
-msingle-float -ms단순-fpu), dp_lite 에 (동등한 -m더블 플로트 -ms단순-fpu),
sp_full 에 (동등한 -msingle-float), 그리고 dp_가득 에 (동등한 -m더블 플로트).
-mxilinx-fpu
Xilinx PPC 405/440에서 부동 소수점 장치에 대한 최적화를 수행합니다.
-m다중
-mno-다중
여러 단어 로드 명령어를 사용(사용하지 않음)하는 코드 생성 및
여러 단어 명령을 저장합니다. 이 지침은 기본적으로 다음에서 생성됩니다.
POWER 시스템이며 PowerPC 시스템에서 생성되지 않습니다. 사용하지 마세요 -m다중 조금에-
엔디안 PowerPC 시스템은 프로세서가
리틀 엔디안 모드. 예외는 다음을 허용하는 PPC740 및 PPC750입니다.
리틀 엔디안 모드의 명령어.
-mstring
-mno-문자열
로드 문자열 명령어와 스토어를 사용(사용하지 않음)하는 코드 생성
여러 레지스터를 저장하고 작은 블록 이동을 수행하는 문자열 워드 명령어. 이것들
명령어는 기본적으로 POWER 시스템에서 생성되며 PowerPC에서는 생성되지 않습니다.
시스템. 사용하지 마세요 -mstring 리틀 엔디안 PowerPC 시스템에서는
프로세서가 리틀 엔디안 모드에 있을 때 명령이 작동하지 않습니다. 예외
리틀 엔디안 모드에서 이러한 명령을 허용하는 PPC740 및 PPC750입니다.
-업데이트
-mno-업데이트
업데이트하는 로드 또는 저장 명령어를 사용(사용하지 않음)하는 코드 생성
기본 레지스터를 계산된 메모리 위치의 주소로 변경합니다. 이 지침
기본적으로 생성됩니다. 사용하는 경우 -mno-업데이트, 사이에 작은 창이 있습니다.
스택 포인터가 업데이트되고 이전 프레임의 주소가
이는 인터럽트 또는 신호를 가로질러 스택 프레임을 이동하는 코드가
손상된 데이터를 얻습니다.
-mavoid-색인 주소
-mno-avoid-색인 주소
인덱싱된 로드 또는 저장의 사용을 피하려는(회피하지 않는) 코드 생성
지침. 이러한 명령은 Power6 프로세서에서 성능 저하를 초래할 수 있습니다.
16M을 넘는 대형 어레이를 통과할 때와 같은 특정 상황에서
경계. 이 옵션은 Power6을 대상으로 할 때 기본적으로 활성화되고 비활성화됩니다.
그렇지 않으면.
-머퓨즈드-매드
-mno-융합-매드
부동 소수점 곱하기 및 누적을 사용(사용하지 않음)하는 코드 생성
지침. 이러한 명령어는 하드웨어 부동 소수점 경우 기본적으로 생성됩니다.
사용. 기계 의존 -머퓨즈드-매드 이제 옵션이 시스템에 매핑됩니다.
독립 -ffp-계약=빠른 옵션 및 -mno-융합-매드 매핑됩니다
-ffp-계약=해제.
-mmulhw
-mno-물흐
하프워드 곱셈 및 곱셈 누산을 사용(사용하지 않음)하는 코드 생성
IBM 405, 440, 464 및 476 프로세서에 대한 지침. 이러한 지침은
해당 프로세서를 대상으로 할 때 기본적으로 생성됩니다.
-mdlmzb
-mno-dlmzb
문자열 검색을 사용(사용하지 않음)하는 코드 생성 dlmzb IBM에 대한 지시
405, 440, 464 및 476 프로세서. 이 명령어는 다음과 같은 경우 기본적으로 생성됩니다.
해당 프로세서를 대상으로 합니다.
-mno 비트 정렬
-mbit 정렬
System V.4와 임베디드 PowerPC 시스템에서 구조와 결합을 강제하지 않습니다.
비트 필드의 기본 유형에 맞춰 정렬될 비트 필드를 포함합니다.
예를 들어 기본적으로 8개의 "부호 없는" 비트 필드만 포함하는 구조
길이 1은 4바이트 경계에 맞춰 정렬되며 크기는 4바이트입니다. 사용하여
-mno 비트 정렬, 구조는 1바이트 경계에 맞춰 정렬되고 크기는 1바이트입니다.
-mno-엄격한 정렬
-mstrict-정렬
System V.4 및 임베디드 PowerPC 시스템에서 정렬되지 않은 메모리가 있다고 가정하지 않습니다.
참조는 시스템에서 처리됩니다.
-m 재배치 가능
-mno 재배치 가능
정적 실행 파일을
런타임에 다른 주소. 간단한 임베디드 PowerPC 시스템 로더는
".got2"의 전체 내용과 ".fixup"에 나열된 4바이트 위치를 재배치합니다.
섹션, 이 옵션에 의해 생성된 32비트 주소 테이블. 이것이 작동하려면 모든
함께 연결된 개체는 다음으로 컴파일해야 합니다. -m 재배치 가능 or -mrelocateable-lib.
-m 재배치 가능 코드는 스택을 8바이트 경계에 맞춥니다.
-mrelocateable-lib
-mno-relocateable-lib
처럼 -m 재배치 가능, -mrelocateable-lib 정적을 허용하는 ".fixup"섹션을 생성합니다.
실행 파일은 런타임에 재배치되지만 -mrelocateable-lib 사용하지 않는다
더 작은 스택 정렬 -m 재배치 가능. 다음으로 컴파일된 객체 -mrelocateable-lib 5월
모든 조합으로 컴파일된 개체와 연결 -m 재배치 가능 옵션을 제공합니다.
-mno-toc
-mtoc
System V.4와 임베디드 PowerPC 시스템에서 레지스터 2가 다음을 포함한다고 가정하지 않습니다.
프로그램에서 사용되는 주소를 가리키는 전역 영역에 대한 포인터.
-조금
-미리틀 엔디안
System V.4 및 임베디드 PowerPC 시스템에서 프로세서용 코드를 약간의 컴파일
엔디안 모드. NS -미리틀 엔디안 옵션은 다음과 같습니다. -조금.
-mbig
-mbig-엔디안
System V.4 및 임베디드 PowerPC 시스템에서 프로세서용 코드를 컴파일합니다.
엔디안 모드. NS -mbig-엔디안 옵션은 다음과 같습니다. -mbig.
-mdynamic-no-pic
Darwin 및 Mac OS X 시스템에서는 재배치할 수 없도록 코드를 컴파일하지만
외부 참조는 재배치 가능합니다. 결과 코드는 다음에 적합합니다.
응용 프로그램이지만 공유 라이브러리는 아닙니다.
-msingle-pic-base
PIC 주소 지정에 사용되는 레지스터를 로드하는 대신 읽기 전용으로 처리하십시오.
각 기능에 대한 프롤로그. 런타임 시스템은 이것을 초기화할 책임이 있습니다.
실행이 시작되기 전에 적절한 값으로 등록하십시오.
- 우선 순위 제한 - inns =우선
이 옵션은 디스패치 슬롯 제한에 할당되는 우선 순위를 제어합니다.
두 번째 스케줄링 패스 동안 지시. 논쟁 거리 우선 가치를 취하다
0, 1및 2 아니오, 가장 높거나 두 번째로 높은(각각) 우선 순위를 할당
디스패치 슬롯 제한 지침.
-msched-비용이 많이 드는-dep=의존 유형
이 옵션은 대상에서 비용이 많이 드는 것으로 간주되는 종속성을 제어합니다.
명령 스케줄링. 논쟁 거리 의존 유형 다음 중 하나를 취합니다.
값 :
아니 의존성 비용이 들지 않습니다.
모든 모든 의존성은 비용이 많이 듭니다.
true_store_to_load
상점에서 로드까지의 진정한 의존은 비용이 많이 듭니다.
store_to_load
저장소에서 로드까지의 모든 종속성은 비용이 많이 듭니다.
번호
대기 시간이 다음보다 크거나 같은 모든 종속성 번호 비용이 많이 듭니다.
-minsert-sched-nops=계획
이 옵션은 두 번째 스케줄링 중에 사용되는 NOP 삽입 방식을 제어합니다.
통과하다. 논쟁 거리 계획 다음 값 중 하나를 사용합니다.
아니 NOP를 삽입하지 마십시오.
인주 에 따라 빈 문제 슬롯이 있는 모든 디스패치 그룹을 NOP로 채우십시오.
스케줄러의 그룹화.
재그룹_정확
비용이 많이 드는 종속 숙박 시설을 별도의 그룹으로 강제하려면 NOP를 삽입하세요. 정확히 삽입
추정에 따라 새 그룹에 여관을 강제하는 데 필요한 만큼의 NOP
프로세서 그룹화.
번호
비용이 많이 드는 종속 숙박 시설을 별도의 그룹으로 강제하려면 NOP를 삽입하세요. 끼워 넣다 번호
NOP는 여관을 새 그룹에 강제 적용합니다.
-mcall-sysv
System V.4 및 임베디드 PowerPC 시스템에서 다음과 같은 호출 규칙을 사용하여 코드를 컴파일합니다.
System V Application Binary Interface, PowerPC의 1995년 XNUMX월 초안 준수
프로세서 보충. 다음을 사용하여 GCC를 구성하지 않는 한 기본값입니다.
powerpc-*-eabiaix.
-mcall-sysv-eabi
-mcall-eabi
둘 다 지정 -mcall-sysv and -메이비 옵션을 제공합니다.
-mcall-sysv-noeabi
둘 다 지정 -mcall-sysv and -mno-eabi 옵션을 제공합니다.
-mcall-aixdesc
System V.4 및 임베디드 PowerPC 시스템에서 AIX 운영 체제용 코드를 컴파일합니다.
-mcall-리눅스
System V.4 및 임베디드 PowerPC 시스템에서 Linux 기반 GNU용 컴파일 코드
시스템.
-mcall-freebsd
System V.4 및 임베디드 PowerPC 시스템에서 FreeBSD 운영을 위한 코드 컴파일
시스템.
-mcall-netbsd
System V.4 및 임베디드 PowerPC 시스템에서 NetBSD 운영을 위한 코드 컴파일
시스템.
-mcall-openbsd
System V.4 및 임베디드 PowerPC 시스템에서 OpenBSD 운영을 위한 코드 컴파일
시스템.
-maix-구조체-반환
메모리의 모든 구조를 반환합니다(AIX ABI에서 지정한 대로).
-msvr4-구조체 반환
레지스터에서 8바이트보다 작은 구조를 반환합니다(SVR4 ABI에 의해 지정됨).
-마비=아비형
특정 확장으로 현재 ABI를 확장하거나 그러한 확장을 제거하십시오. 유효한
값은 알티벡, 무알티벡, spe, 노스페, ibmlongdouble, ieeelongdouble, 엘프1,
엘프2.
-마비=스페
SPE ABI 확장으로 현재 ABI를 확장합니다. 이것은 기본 ABI를 변경하지 않으며,
대신 현재 ABI에 SPE ABI 확장을 추가합니다.
-마비=노스페
현재 ABI에 대해 Book-E SPE ABI 확장을 비활성화합니다.
-마비=ibmlongdouble
IBM 확장 정밀도 long double을 사용하도록 현재 ABI를 변경하십시오. 파워피씨입니다
32비트 SYSV ABI 옵션.
-mabi=이에롱더블
IEEE 확장 정밀도 long double을 사용하도록 현재 ABI를 변경합니다. 파워피씨입니다
32비트 Linux ABI 옵션.
-마비=엘프v1
ELFv1 ABI를 사용하도록 현재 ABI를 변경합니다. 이것은 빅 엔디안의 기본 ABI입니다.
PowerPC 64비트 리눅스. 기본 ABI를 재정의하려면 특별한 시스템 지원이 필요하며
놀라운 방식으로 실패할 가능성이 높습니다.
-마비=엘프v2
ELFv2 ABI를 사용하도록 현재 ABI를 변경합니다. 이것은 작은-
endian PowerPC 64비트 Linux. 기본 ABI를 재정의하려면 특별한 시스템이 필요합니다.
지원하고 놀라운 방식으로 실패할 가능성이 높습니다.
-m프로토타입
-mno 프로토타입
System V.4 및 임베디드 PowerPC 시스템에서 모든 호출은 가변 인수로 간주됩니다.
기능이 제대로 프로토타입됩니다. 그렇지 않으면 컴파일러는 명령어를 삽입해야 합니다.
조건 코드 레지스터의 비트 6을 설정하거나 지우기 위해 프로토타입이 생성되지 않은 모든 호출 전에
("CR") 부동 소수점 값이 부동 소수점으로 전달되는지 여부를 나타냅니다.
함수가 변수 인수를 취하는 경우를 대비하여 등록합니다. 와 함께 -m프로토타입, 통화만
프로토타입된 가변 인수 함수에 비트를 설정하거나 지웁니다.
-msim
임베디드 PowerPC 시스템에서 시작 모듈이 호출된다고 가정합니다. sim-crt0.o and
표준 C 라이브러리는 libsim.a and libc.a. 에 대한 기본값입니다.
powerpc-*-에비심 구성.
-mmvme
임베디드 PowerPC 시스템에서 시작 모듈이 호출된다고 가정합니다. crt0.o 그리고
표준 C 라이브러리는 libmvme.a and libc.a.
- 미친
임베디드 PowerPC 시스템에서 시작 모듈이 호출된다고 가정합니다. crt0.o 그리고
표준 C 라이브러리는 libads.a and libc.a.
-골수칼
임베디드 PowerPC 시스템에서 시작 모듈이 호출된다고 가정합니다. crt0.o 그리고
표준 C 라이브러리는 libyk.a and libc.a.
-mvxworks
System V.4 및 임베디드 PowerPC 시스템에서 컴파일 중임을 지정하십시오.
VxWorks 시스템.
-멤버
임베디드 PowerPC 시스템에서 ELF 플래그 헤더의 "PPC_EMB" 비트를 설정하여
그 에비 확장 재배치가 사용됩니다.
-메이비
-mno-eabi
System V.4 및 임베디드 PowerPC 시스템에서 Embedded
시스템에 대한 수정 세트인 EABI(Application Binary Interface)
V.4 사양. 선택 -메이비 스택이 8바이트로 정렬되었음을 의미합니다.
경계에서 "__eabi" 함수는 "main"에서 호출되어 EABI 환경을 설정합니다.
그리고 -msdata 옵션은 "r2"와 "r13"을 모두 사용하여 두 개의 개별 작은 데이터를 가리킬 수 있습니다.
지역. 선택 -mno-eabi 스택이 16바이트 경계에 맞춰 정렬되었음을 의미합니다.
EABI 초기화 함수는 "main"에서 호출되며, -msdata 옵션만 사용
"r13"은 하나의 작은 데이터 영역을 가리킵니다. NS -메이비 옵션은 기본적으로 켜져 있습니다.
다음 중 하나를 사용하여 구성된 GCC powerpc*-*-eabi* 옵션을 제공합니다.
-msdata=에비
System V.4 및 임베디드 PowerPC 시스템에서 초기화된 작은 "const" 전역 및
레지스터 "r2"가 가리키는 ".sdata2" 섹션의 정적 데이터. 작게 넣어
".sdata" 섹션에서 초기화된 비 "const" 전역 및 정적 데이터
레지스터 "r13"이 가리킵니다. 초기화되지 않은 작은 전역 및 정적 데이터를
".sdata" 섹션에 인접한 ".sbss" 섹션. NS -msdata=에비 option
와 호환되지 않습니다 -m 재배치 가능 선택권. 그만큼 -msdata=에비 옵션은 또한
-멤버 옵션을 선택합니다.
-msdata=sysv
System V.4 및 임베디드 PowerPC 시스템에서 작은 전역 및 정적 데이터를
레지스터 "r13"이 가리키는 ".sdata" 섹션. 작은 초기화되지 않은 넣어
".sdata"에 인접한 ".sbss" 섹션의 전역 및 정적 데이터
부분. NS -msdata=sysv 옵션이 호환되지 않습니다. -m 재배치 가능 옵션을 선택합니다.
-msdata=기본값
-msdata
System V.4 및 임베디드 PowerPC 시스템에서 다음과 같은 경우 -메이비 사용되는 경우 코드를 동일하게 컴파일
as -msdata=에비, 그렇지 않으면 다음과 같은 코드를 컴파일합니다. -msdata=sysv.
-msdata=데이터
System V.4 및 임베디드 PowerPC 시스템에서 ".sdata"에 작은 전역 데이터를 넣습니다.
부분. ".sbss" 섹션에 초기화되지 않은 작은 전역 데이터를 넣습니다. 사용하지 마세요
그러나 작은 데이터를 처리하려면 "r13"을 등록하십시오. 다음이 아니면 기본 동작입니다.
other -msdata 옵션이 사용됩니다.
-msdata=없음
-mno-sdata
임베디드 PowerPC 시스템에서 초기화된 모든 전역 및 정적 데이터를 ".data"에 넣습니다.
섹션 및 ".bss" 섹션의 초기화되지 않은 모든 데이터.
-mblock-이동-인라인-제한=NUM
모든 블록 이동(예: "memcpy" 또는 구조 복사본 호출)을 인라인하거나
동일 NUM 바이트. 에 대한 최소값 NUM 32비트 대상에서는 32바이트이고 64비트에서는
64비트 대상에서 바이트. 기본값은 대상에 따라 다릅니다.
-G NUM
임베디드 PowerPC 시스템에서 전역 및 정적 항목을 다음보다 작거나 같음 NUM
일반 데이터 또는 BSS 섹션 대신 작은 데이터 또는 BSS 섹션에 바이트를 넣습니다.
기본적으로, NUM 8입니다. -G NUM 스위치도 링커로 전달됩니다. 모든 모듈
같은 것으로 컴파일해야합니다 -G NUM 값.
-mregnames
-mno-regnames
System V.4 및 임베디드 PowerPC 시스템에서 레지스터 이름을 내보내지 않습니다.
기호 형식을 사용한 어셈블리 언어 출력
-mlongcall
-mno-longcall
기본적으로 모든 호출이 멀리 떨어져 있다고 가정하여 더 길고 비용이 많이 듭니다.
호출 순서가 필요합니다. 32MB 이상의 통화에 필요합니다.
(33,554,432바이트) 현재 위치에서. 다음과 같은 경우 짧은 통화가 생성됩니다.
컴파일러는 호출이 그렇게 멀리 떨어져 있을 수 없다는 것을 알고 있습니다. 이 설정은 다음으로 재정의할 수 있습니다.
"단기 호출" 기능 속성 또는 "#pragma" 롱콜(0)".
일부 링커는 범위를 벗어난 호출을 감지하고 글루 코드를 생성할 수 있습니다.
파리. 이러한 시스템에서는 긴 호출이 필요하지 않으며 더 느린 코드를 생성합니다. 같이
이 글에서 AIX 링커는 PowerPC/64용 GNU 링커와 마찬가지로 이 작업을 수행할 수 있습니다. 그것
32비트 PowerPC 시스템용 GNU 링커에도 이 기능을 추가할 계획입니다.
Darwin/PPC 시스템에서 "#pragma longcall"은 "jbsr callee, L42"를 생성하고 지사
섬 (접착 코드). 두 개의 대상 주소는 수신자와 분기를 나타냅니다.
섬. Darwin/PPC 링커는 첫 번째 주소를 선호하고 "bl callee"를 생성합니다.
PPC "bl" 명령이 수신자에게 직접 도달하는 경우; 그렇지 않으면 링커
브랜치 아일랜드를 호출하기 위해 "bl L42"를 생성합니다. 브랜치 아일랜드가 추가됩니다.
호출 함수의 본체; 호출 수신자의 전체 32비트 주소를 계산하고
그것에 점프.
Mach-O(Darwin) 시스템에서 이 옵션은 컴파일러가 글루로 방출하도록 지시합니다.
모든 직접 호출, 그리고 Darwin 링커는 이를 사용할지 버릴지 결정합니다.
앞으로 GCC는 링커가 다음과 같이 알려진 경우 모든 longcall 사양을 무시할 수 있습니다
접착제를 생성합니다.
-mtls-마커
-mno-tls-마커
기능을 지정하는 재배치로 "__tls_get_addr"에 대한 호출을 표시(표시하지 않음)
논쟁. 재배치는 링커가 함수 호출을 다음과 안정적으로 연결할 수 있도록 합니다.
TLS 최적화를 위한 인수 설정 지침을 통해 GCC가 더 나은
순서를 예약합니다.
-pthread
멀티스레딩 지원 추가 pthread 도서관. 이 옵션은 플래그를 설정합니다.
전처리기와 링커 모두.
-mrecip
-mno-recipe
이 옵션을 사용하면 역 추정 및 역 제곱근 추정을 사용할 수 있습니다.
대신 정밀도를 높이기 위해 추가 Newton-Raphson 단계가 포함된 지침
부동 소수점 인수에 대해 나누기 또는 제곱근 및 나누기를 수행합니다. 당신은 사용해야합니다
전에, -빠른 수학 사용시 옵션 -mrecip (아니면 적어도 -재미있는 수학 최적화,
- 유한 수학 전용, - 분수 수학 and -fno 트래핑 수학). 동안 참고
시퀀스의 처리량은 일반적으로 비 처리량의 처리량보다 높습니다.
상호 명령, 시퀀스의 정밀도는 최대 2ulp까지 감소될 수 있습니다.
(즉, 1.0의 역수는 0.99999994와 같음) 역제곱근의 경우.
-mrecip=고르다
이 옵션은 사용할 수 있는 상호 추정 지침을 제어합니다. 고르다 하는
"!"가 앞에 올 수 있는 쉼표로 구분된 옵션 목록 옵션을 반전시키려면:
모든 모든 견적 지침을 활성화합니다.
디폴트 값
에 해당하는 기본 지침을 활성화합니다. -mrecip.
없음
에 해당하는 모든 추정 지침을 비활성화합니다. -mno-recipe.
DIV 단일 및 이중 모두에 대해 역 근사 명령어를 활성화합니다.
정도.
디브
단정밀도 역 근사 명령어를 활성화합니다.
분할
배정밀도 역수 근사 명령어를 활성화합니다.
RSQRT
단일 및
이중 정밀도.
RSQRTF
단정밀도 역제곱근 근사 명령어를 활성화합니다.
RSQRTD
배정밀도 역제곱근 근사 명령어를 활성화합니다.
예를 들어 -mrecip=모두,!rsqrtd 모든 상호 추정을 가능하게 합니다.
"FRSQRTE", "XSRSQRTEDP" 및 "XVRSQRTEDP" 명령어 제외
배정밀도 역 제곱근 계산을 처리합니다.
-mrecip-정밀도
-mno-precision.
상호 추정 지침이 더 높은 값을 제공한다고 가정(가정하지 않음)
PowerPC ABI에서 요구하는 것보다 정확한 추정치. 선택 -mcpu=파워6,
-mcpu=파워7 or -mcpu=파워8 자동으로 선택 -mrecip-정밀도. 두배-
정밀도 제곱근 추정 명령어는 기본적으로 낮은 값에서 생성되지 않습니다.
정밀 기계는 XNUMX 후에 수렴하는 추정치를 제공하지 않기 때문에
단계.
-mveclibabi=유형
외부 라이브러리를 사용하여 내장 함수를 벡터화하는 데 사용할 ABI 유형을 지정합니다.
현재 지원되는 유일한 유형은 질량, IBM의 수학을 사용하도록 지정합니다.
외부를 사용하여 내장 함수를 벡터화하기 위한 MASS(가속 하위 시스템) 라이브러리
도서관. GCC는 현재 "acosd2", "acosf4", "acoshd2", "acoshf4",
"asind2", "asinf4", "asinhd2", "asinhf4", "atan2d2", "atan2f4", "atand2", "atanf4",
"atanhd2", "atanhf4", "cbrtd2", "cbrtf4", "cosd2", "cosf4", "coshd2", "coshf4",
"erfcd2", "erfcf4", "erfd2", "erff4", "exp2d2", "exp2f4", "expd2", "expf4", "expm1d2",
"expm1f4", "hypotd2", "hypotf4", "lgammad2", "lgammaf4", "log10d2", "log10f4",
"log1pd2", "log1pf4", "log2d2", "log2f4", "logd2", "logf4", "powd2", "powf4", "sind2",
"sinf4", "sinhd2", "sinhf4", "sqrtd2", "sqrtf4", "tand2", "tanf4", "tanhd2" 및
power4에 대한 코드를 생성할 때 "tanhf7". 둘 다 -ftree 벡터화 and
-재미있는 수학 최적화 도 활성화해야 합니다. MASS 라이브러리는 다음과 같아야 합니다.
링크 시간에 지정됩니다.
-mfriz
-mno-friz
"friz" 명령어를 생성(생성하지 않음)할 때 -재미있는 수학 최적화
옵션은 부동 소수점 값의 반올림을 64비트 정수로 최적화하는 데 사용되며
부동 소수점으로 돌아갑니다. "friz" 명령어는 다음과 같은 경우 동일한 값을 반환하지 않습니다.
부동 소수점 숫자가 너무 커서 정수에 맞지 않습니다.
-중첩 함수에 대한 mpointers
-중첩 함수에 대한 mno 포인터
정적 체인 레지스터("r11")를 로드하는 코드를 생성(생성하지 않음)할 때
함수 포인터가 있는 AIX 및 64비트 Linux 시스템에서 포인터를 통해 호출
함수 주소, 로드할 TOC 값을 제공하는 3워드 디스크립터를 가리킵니다.
레지스터 "r2" 및 레지스터 "r11"에 로드할 정적 체인 값. NS
-중첩 함수에 대한 mpointers 기본적으로 켜져 있습니다. 포인터를 통해 호출할 수 없습니다.
중첩된 함수 또는 사용하는 다른 언어로 컴파일된 함수에 대한 포인터
사용하는 경우 정적 체인 -중첩 함수에 대한 mno 포인터.
-msave-toc-간접
-mno-save-toc-간접
예약된 스택 위치에 TOC 값을 저장하는 코드 생성(생성하지 않음)
함수가 AIX 및 64비트의 포인터를 통해 호출하는 경우 함수 프롤로그에서
리눅스 시스템. TOC 값이 프롤로그에 저장되지 않은 경우 직전에 저장됩니다.
포인터를 통한 호출 NS -mno-save-toc-간접 옵션이 기본값입니다.
-mcompat-정렬-parm
-mno-compat-align-parm
최대 정렬로 구조 매개변수를 전달하는 코드 생성(생성하지 않음)
이전 버전의 GCC와의 호환성을 위해 64비트입니다.
이전 버전의 GCC(4.9.0 이전)는 구조 매개변수를 잘못 정렬하지 않았습니다.
해당 구조에 128비트가 필요한 멤버가 포함된 경우 128비트 경계에서
조정. 이것은 최신 버전의 GCC에서 수정되었습니다. 이 옵션을 사용할 수 있습니다
의 이전 버전으로 컴파일된 함수와 호환되는 코드를 생성하기 위해
gcc.
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 -mno-compat-align-parm 옵션이 기본값입니다.
RX 옵션
다음 명령줄 옵션은 RX 대상에 대해 정의됩니다.
-m64bit-더블
-m32bit-더블
"이중" 데이터 유형을 64비트(-m64bit-더블) 또는 32비트(-m32bit-더블)
크기에. 기본값은 -m32bit-더블. 주의 사항 RX 부동 소수점 하드웨어만 작동
32비트 값에서 기본값은 다음과 같습니다. -m32bit-더블.
-fpu
-노푸
활성화(-fpu) 또는 비활성화(-노푸) RX 부동 소수점 하드웨어 사용. NS
기본값은 RX600 시리즈에 대해 활성화되고 RX200 시리즈에 대해 비활성화됩니다.
부동 소수점 명령어는 32비트 부동 소수점 값에 대해서만 생성됩니다.
그러나 FPU 하드웨어는 다음과 같은 경우 복식에 사용되지 않습니다. -m64bit-더블 옵션은
익숙한.
주의 사항 경우 -fpu 옵션이 활성화되면 -재미있는 수학 최적화 도 활성화됩니다
자동으로. RX FPU 명령어 자체가 안전하지 않기 때문입니다.
-mcpu =name
대상으로 할 RX CPU 유형을 선택합니다. 현재 세 가지 유형이 지원되며,
일반적인 RX600 and RX200 시리즈 하드웨어 및 특정 RX610 CPU. 기본값은
RX600.
유일한 차이점은 RX600 and RX610 동부 표준시 가야 르 RX610 지원하지 않습니다
"MVTIPL" 명령.
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 RX200 시리즈에는 하드웨어 부동 소수점 단위가 없으므로 -노푸 사용 가능
이 유형을 선택하면 기본적으로
-mbig-endian-데이터
-mlittle-endian-데이터
빅 엔디안 형식으로 데이터(코드 제외)를 저장합니다. 기본값은
-mlittle-endian-데이터, 즉, 리틀 엔디안 형식으로 데이터를 저장합니다.
-m작은 데이터 제한=N
배치할 수 있는 전역 및 정적 변수의 최대 크기를 바이트 단위로 지정합니다.
작은 데이터 영역으로 작은 데이터 영역을 사용하면 더 작고 빨라질 수 있습니다.
코드이지만 영역의 크기는 제한되어 있으며 프로그래머가 이를 확인하는 것은
영역이 넘치지 않습니다. 또한 작은 데이터 영역이 RX 중 하나를 사용하는 경우
레지스터(보통 "r13")는 이 영역을 가리키는 용도로 예약되어 있으므로
컴파일러에서 더 오래 사용할 수 있습니다. 이로 인해 속도가 느려지거나 커질 수 있습니다.
변수가 이 레지스터에 유지되는 대신 스택에 푸시되는 경우 코드입니다.
공통 변수(초기화되지 않은 변수)와 상수는
다른 섹션에 할당되므로 작은 데이터 영역에 배치되지 않습니다.
출력 실행 가능.
기본값은 이 기능을 비활성화하는 XNUMX입니다. 참고로 이 기능은
더 높은 최적화 수준에서 기본적으로 활성화됨(-O2 등) 때문에
레지스터 예약의 잠재적으로 해로운 영향. 그것은 프로그래머에게 달려있다.
이 기능이 프로그램에 유용한지 여부를 실험하고 발견합니다. 보다
에 대한 설명 -mpid 실제 등록 방법에 대한 설명을 위한 옵션
작은 데이터 영역 포인터가 선택된 상태를 유지합니다.
-msim
-mno-sim
시뮬레이터 런타임을 사용하십시오. 기본값은 libgloss 보드별 런타임을 사용하는 것입니다.
-mas100-구문
-mno-as100-구문
어셈블러 출력을 생성할 때 Renesas의 AS100과 호환되는 구문을 사용하십시오.
어셈블러. 이 구문은 GAS 어셈블러에서도 처리할 수 있지만 일부
기본적으로 생성되지 않도록 제한합니다.
-mmax-일정 크기=N
에서 피연산자로 사용할 수 있는 상수의 최대 크기(바이트)를 지정합니다.
RX 명령. RX 명령어 세트는 최대 4의 상수를 허용하지만
명령어에서 사용할 길이의 바이트, 더 긴 값은 더 긴 것과 동일합니다.
지침. 따라서 어떤 상황에서는 크기를 제한하는 것이 유리할 수 있습니다.
명령어에 사용되는 상수. 너무 큰 상수는 대신
상수 풀에 배치되고 레지스터 간접 참조를 통해 참조됩니다.
가치 N 0과 4 사이일 수 있습니다. 0(기본값) 또는 4 값은 다음을 의미합니다.
모든 크기의 상수가 허용됩니다.
-mrelax
링커 이완을 활성화합니다. 링커 이완은 링커가
다양한 명령어의 더 짧은 버전을 찾아 프로그램의 크기를 줄이는 것.
기본적으로 사용하지 않도록 설정되어 있습니다.
-민트 레지스터=N
고속 인터럽트 처리기 기능을 위해 예약할 레지스터 수를 지정합니다. NS
가치 N 0과 4 사이일 수 있습니다. 값이 1이면 레지스터 "r13"이 예약되어 있음을 의미합니다.
고속 인터럽트 핸들러 전용. 2의 값은 "r13"을 예약하고
"r12". 값 3은 "r13", "r12" 및 "r11"을 예약하고 값 4는 "r13"을 예약합니다.
"r10"을 통해. 기본값인 0 값은 레지스터를 예약하지 않습니다.
-msave-ACC -에 - 인터럽트
인터럽트 처리기 기능이 누산기 레지스터를 보존해야 함을 지정합니다.
이것은 일반 코드가 누산기 레지스터를 사용할 수 있는 경우에만 필요합니다.
64비트 곱셈을 수행하기 때문입니다. 기본값은 누산기를 무시하는 것입니다.
이것은 인터럽트 핸들러를 더 빠르게 만들기 때문입니다.
-mpid
-mno-pid
위치 독립 데이터의 생성을 가능하게 합니다. 모든 액세스가 활성화되면
상수 데이터는 레지스터에 있는 기본 주소의 오프셋을 통해 수행됩니다. 이것
필요 없이 런타임에 상수 데이터의 위치를 결정할 수 있습니다.
실행 파일을 재배치할 수 있으며, 이는 긴밀한
메모리 제약. 수정할 수 있는 데이터는 이 옵션의 영향을 받지 않습니다.
이 기능을 사용하면 상수 데이터에 대해 레지스터(보통 "r13")를 예약합니다.
기본 주소. 이것은 특히 복잡한 코드에서 더 느리거나 더 큰 코드를 초래할 수 있습니다.
기능.
일정한 데이터베이스 주소를 유지하기 위해 선택된 실제 레지스터는 다음 여부에 따라 다릅니다.
전에, -m작은 데이터 제한 및 / 또는 -민트 레지스터 명령줄 옵션이 활성화됩니다.
레지스터 "r13"부터 시작하여 아래쪽으로 진행하면 레지스터가 먼저 할당됩니다.
의 요구 사항을 충족하기 위해 -민트 레지스터다음, -mpid 그리고 마지막으로
-m작은 데이터 제한. 따라서 작은 데이터 영역 레지스터는 "r8"이 될 수 있습니다.
둘 다 -민트 레지스터=4 and -mpid 명령줄에 지정됩니다.
기본적으로 이 기능은 활성화되어 있지 않습니다. 기본값은 다음을 통해 복원할 수 있습니다. -mno-pid
명령줄 옵션.
-mno-warn-다중 고속-인터럽트
-mwarn-다중 고속 인터럽트
하나 이상의 빠른 인터럽트를 발견하면 GCC가 경고 메시지를 발행하는 것을 방지합니다.
파일을 컴파일할 때 핸들러. 기본값은 각 추가 항목에 대해 경고를 발행하는 것입니다.
RX는 이러한 인터럽트를 하나만 지원하므로 빠른 인터럽트 핸들러를 찾았습니다.
참고 : 일반 GCC 명령줄 옵션 -고정-등록 번호 RX에 특별한 의미가 있습니다.
"인터럽트" 기능 속성과 함께 사용되는 경우 포트입니다. 이 속성은 다음을 나타냅니다.
빠른 인터럽트를 처리하기 위한 기능입니다. GCC는 레지스터만 사용하도록 합니다.
"r10", "r11", "r12" 및/또는 "r13" 및/또는 "rXNUMX" 및
해당 레지스터는 다음을 통해 제한되었습니다. -고정-등록 번호 or -민트 레지스터
명령줄 옵션.
S / 390 and z 시리즈 옵션
이들은 있습니다 -m S/390 및 zSeries 아키텍처에 대해 정의된 옵션.
-mhard-float
-msoft-float
부동 소수점 명령어 및 부동 소수점 레지스터를 사용(사용하지 않음)
포인트 작업. 언제 -msoft-float 가 지정되면 기능 libgcc.a ~에 익숙하다
부동 소수점 연산을 수행합니다. 언제 -mhard-float 지정되면 컴파일러
IEEE 부동 소수점 명령어를 생성합니다. 이것이 기본값입니다.
-mhard-dfp
-mno-하드-dfp
XNUMX진수에 대한 하드웨어 XNUMX진수 부동 소수점 명령어를 사용(사용하지 않음)
부동 소수점 연산. 언제 -mno-하드-dfp 가 지정되면 기능 libgcc.a are
소수점 부동 소수점 연산을 수행하는 데 사용됩니다. 언제 -mhard-dfp 지정되고,
컴파일러는 XNUMX진수 부동 소수점 하드웨어 명령어를 생성합니다. 이것은 기본값입니다
for -행진=z9-ec 이상.
-mlong-더블-64
-mlong-더블-128
이 스위치는 "롱 더블" 유형의 크기를 제어합니다. 64비트의 크기는
"long double" 유형은 "double" 유형에 해당합니다. 이것이 기본값입니다.
-mbackchain
-mno-백체인
호출자의 프레임 주소를 백체인 포인터로 저장(저장하지 않음)
수신자의 스택 프레임. 다음과 같은 도구를 사용하여 디버깅을 허용하려면 백체인이 필요할 수 있습니다.
DWARF 2 호출 프레임 정보를 이해하지 못합니다. 언제 -mno-packed-스택 에
효과, 백체인 포인터는 스택 프레임의 맨 아래에 저장됩니다. 언제
-mpacked-스택 실제로 백체인은 최상위 단어에 배치됩니다.
96/160바이트 레지스터 저장 영역.
일반적으로 컴파일된 코드는 -mbackchain 다음으로 컴파일된 코드와 호출 호환 가능
-mmo-백체인; 그러나 디버깅 목적으로 백체인을 사용하려면 일반적으로 다음이 필요합니다.
전체 바이너리가 -mbackchain. 의 조합에 유의하십시오.
-mbackchain, -mpacked-스택 and -mhard-float 지원되지 않습니다. 구축하기 위해서는
리눅스 커널 사용 -msoft-float.
기본값은 백체인을 유지하지 않는 것입니다.
-mpacked-스택
-mno-packed-스택
패킹된 스택 레이아웃을 사용(사용하지 않음)합니다. 언제 -mno-packed-스택 지정되고,
컴파일러는 96/160바이트 레지스터 저장 영역의 모든 필드를 사용합니다.
기본 목적; 사용하지 않는 필드는 여전히 스택 공간을 차지합니다. 언제 -mpacked-스택 is
지정되면 레지스터 저장 슬롯은 레지스터 저장 상단에 조밀하게 채워집니다.
지역; 사용하지 않은 공간은 다른 용도로 재사용되어 보다 효율적으로 사용할 수 있습니다.
사용 가능한 스택 공간 그러나 언제 -mbackchain 도 유효합니다. 최상위
저장 영역의 단어는 항상 백체인을 저장하는 데 사용되며 반환 주소
레지스터는 항상 백체인 아래에 두 단어로 저장됩니다.
스택 프레임 백체인을 사용하지 않는 한 다음으로 생성된 코드는 -mpacked-스택
로 생성된 코드와 통화 호환 가능 -mno-packed-스택. 일부 비 FSF
스택 프레임을 사용하는 S/2.95 또는 zSeries 생성 코드용 GCC 390 릴리스
디버깅 목적뿐만 아니라 런타임에 백체인. 이러한 코드는 호출되지 않습니다.
로 컴파일된 코드와 호환 가능 -mpacked-스택. 또한, 다음의 조합에 유의하십시오.
-mbackchain, -mpacked-스택 and -mhard-float 지원되지 않습니다. 구축하기 위해서는
리눅스 커널 사용 -msoft-float.
기본값은 패킹된 스택 레이아웃을 사용하지 않는 것입니다.
-msmall-exec
-mno-소형-exec
서브루틴을 수행하기 위해 "bras" 명령어를 사용하여 코드 생성(또는 생성하지 않음)
전화. 이것은 전체 실행 파일 크기가 64k를 초과하지 않는 경우에만 안정적으로 작동합니다.
기본값은 대신 "basr" 명령을 사용하는 것입니다.
한정.
-m64
-m31
인셀덤 공식 판매점인 -m31 지정되면 S/390 ABI용 GNU/Linux와 호환되는 코드를 생성합니다. 언제
-m64 지정되면 zSeries ABI용 GNU/Linux와 호환되는 코드를 생성합니다. 이것
GCC는 특히 64비트 명령어를 생성할 수 있습니다. 를 위해 s390 대상,
기본값은 -m31반면, s390x 기본적으로 대상 -m64.
-mzarch
-메사
인셀덤 공식 판매점인 -mzarch 가 지정되면 에서 사용 가능한 지침을 사용하여 코드를 생성합니다.
z/아키텍처. 언제 -메사 지정된 경우 지침을 사용하여 코드 생성
ESA/390에서 사용할 수 있습니다. 참고 -메사 로는 불가능 -m64. 생성할 때
S/390 ABI용 GNU/Linux와 호환되는 코드, 기본값은 -메사. 생성할 때
zSeries ABI용 GNU/Linux와 호환되는 코드, 기본값은 -mzarch.
-mmvcle
-mno-mvcle
블록을 수행하기 위해 "mvcle" 명령어를 사용하여 코드 생성(또는 생성하지 않음)
움직인다. 언제 -mno-mvcle 지정된 경우 대신 "mvc" 루프를 사용하십시오. 이것은 기본값입니다
크기를 최적화하지 않는 한.
-m디버그
-mno 디버그
컴파일할 때 추가 디버그 정보를 인쇄하거나 인쇄하지 마십시오. 기본값은
디버그 정보를 인쇄하지 않습니다.
-행진=CPU 유형
에서 실행되는 코드 생성 CPU 유형를 나타내는 시스템의 이름입니다.
특정 프로세서 유형. 가능한 값 CPU 유형 are g5, g6, z900, z990, z9-109,
Z9-EC, z10, z196, ZEC12및 z13. 지침을 사용하여 코드를 생성할 때
z/Architecture에서 사용 가능하며 기본값은 -행진=z900. 그렇지 않으면 기본값은
-행진=g5.
-mtune=CPU 유형
튜닝 CPU 유형 ABI를 제외하고 생성된 코드에 적용 가능한 모든 것
사용 가능한 지침 세트. 목록 CPU 유형 값은 다음과 같습니다.
-XNUMX 월. 기본값은 다음에 사용되는 값입니다. -XNUMX 월.
-mtpf 추적
-mno-tpf-추적
추적 루틴에 TPF OS 특정 분기에 추가(추가하지 않음)하는 코드 생성
운영 체제에서. 이 옵션은 기본적으로 해제되어 있습니다.
TPF OS.
-머퓨즈드-매드
-mno-융합-매드
부동 소수점 곱하기 및 누적을 사용(사용하지 않음)하는 코드 생성
지침. 이러한 명령어는 하드웨어 부동 소수점 경우 기본적으로 생성됩니다.
사용.
-mwarn-프레임 크기=프레임 크기
현재 기능이 주어진 프레임 크기를 초과하면 경고를 내보냅니다. 왜냐하면 이것은
컴파일 타임 체크는 프로그램이 실행될 때 실제 문제가 될 필요가 없습니다. 그것
스택 오버플로를 일으킬 가능성이 가장 높은 함수를 식별하기 위한 것입니다. 그것은이다
Linux 커널과 같이 스택 크기가 제한된 환경에서 사용하면 유용합니다.
-mwarn-동적 스택
함수가 "alloca"를 호출하거나 동적으로 크기가 조정된 배열을 사용하는 경우 경고를 내보냅니다. 이것
일반적으로 스택 크기가 제한되어 있으면 좋지 않습니다.
-mstack-가드=스택 가드
-mstack-크기=스택 크기
이러한 옵션이 제공되면 S/390 백엔드는
스택 크기가 다음과 같은 경우 트랩을 트리거하는 함수 프롤로그 스택 가드 위의 바이트
스택 크기 (S/390의 스택은 아래쪽으로 커집니다.) 만약 스택 가드
옵션은 컴파일된 프레임 크기보다 큰 2의 최소 거듭제곱이 생략됩니다.
기능이 선택됩니다. 이 옵션은 스택 디버깅을 돕기 위해 사용됩니다.
오버플로 문제. 추가로 방출된 코드는 약간의 오버헤드만 발생시키고
따라서 더 나은 성능 없이 프로덕션과 유사한 시스템에서도 사용할 수 있습니다.
하락. 주어진 값은 2의 정확한 거듭제곱이어야 하며 스택 크기 이어야한다
보다 큰 스택 가드 64k를 초과하지 않습니다. 효율적인 추가 작업을 위해
코드는 스택이 값에 정렬된 주소에서 시작한다고 가정합니다.
주어진 스택 크기. 그만큼 스택 가드 옵션은 다음과 함께만 사용할 수 있습니다.
스택 크기.
-mhotpatch=반말,후반부
핫패치 옵션이 활성화되면 "핫패칭" 기능 프롤로그가 생성됩니다.
컴파일 유닛의 모든 기능. 함수 레이블 앞에 주어진
XNUMX바이트 NOP 명령어 수(반말, 최대 1000000). 후
레이블, 2 * 후반부 명령과 같은 가장 큰 NOP를 사용하여 바이트가 추가됩니다.
아키텍처에서 허용합니다(최대 1000000).
두 인수가 모두 XNUMX이면 핫패칭이 비활성화됩니다.
이 옵션은 "hotpatch" 속성을 사용하여 개별 기능에 대해 재정의할 수 있습니다.
점수 옵션
다음 옵션은 점수 구현에 대해 정의됩니다.
-메브
빅 엔디안 모드에 대한 코드를 컴파일합니다. 이것이 기본값입니다.
-멜
리틀 엔디안 모드에 대한 코드를 컴파일합니다.
-mnhwloop
"bcnz" 명령어 생성을 비활성화합니다.
-물
정렬되지 않은 로드 및 저장 명령어 생성을 활성화합니다.
-mmac
곱하기 누산 명령어 사용을 활성화합니다. 기본적으로 비활성화되어 있습니다.
-mscore5
SCORE5를 대상 아키텍처로 지정합니다.
-mscore5u
대상 아키텍처의 SCORE5U를 지정합니다.
-mscore7
SCORE7을 대상 아키텍처로 지정합니다. 이것이 기본값입니다.
-mscore7d
SCORE7D를 대상 아키텍처로 지정합니다.
SH 옵션
Bowman의 -m 옵션은 SH 구현에 대해 정의됩니다.
-m1 SH1에 대한 코드를 생성합니다.
-m2 SH2에 대한 코드를 생성합니다.
-m2e
SH2e용 코드를 생성합니다.
-m2a-노푸
FPU 없이 SH2a용 코드를 생성하거나 다음과 같은 방식으로 SH2a-FPU용 코드를 생성합니다.
부동 소수점 단위는 사용되지 않습니다.
-m2a-단일 전용
배정밀도 부동 소수점이 없는 방식으로 SH2a-FPU용 코드를 생성합니다.
조작이 사용됩니다.
-m2a-단일
부동 소수점 단위가 단정밀도라고 가정하여 SH2a-FPU용 코드 생성
기본적으로 모드.
-m2a
부동 소수점 단위가 배정밀도라고 가정하고 SH2a-FPU용 코드 생성
기본적으로 모드.
-m3 SH3에 대한 코드를 생성합니다.
-m3e
SH3e용 코드를 생성합니다.
-m4-노푸
부동 소수점 단위 없이 SH4용 코드를 생성합니다.
-m4-단일 전용
단일 지원만 지원하는 부동 소수점 단위로 SH4용 코드 생성
정밀 산술.
-m4-단일
부동 소수점 단위가 단정밀도 모드에 있다고 가정하여 SH4용 코드 생성
기본적으로
-m4 SH4에 대한 코드를 생성합니다.
-m4-100
SH4-100용 코드를 생성합니다.
-m4-100-노푸
부동 소수점 단위가 사용되지 않는 방식으로 SH4-100에 대한 코드를 생성하십시오.
-m4-100-단일
부동 소수점 단위가 단정밀도 모드에 있다고 가정하여 SH4-100용 코드 생성
기본적으로
-m4-100-단일 전용
배정밀도 부동 소수점이 없는 방식으로 SH4-100용 코드를 생성합니다.
조작이 사용됩니다.
-m4-200
SH4-200용 코드를 생성합니다.
-m4-200-노푸
부동 소수점 단위가 아닌 방식으로 SH4-200용 코드 생성
익숙한.
-m4-200-단일
부동 소수점 단위가 단정밀도 모드에 있다고 가정하여 SH4-200용 코드 생성
기본적으로
-m4-200-단일 전용
배정밀도 부동 소수점이 없는 방식으로 SH4-200용 코드를 생성합니다.
조작이 사용됩니다.
-m4-300
SH4-300용 코드를 생성합니다.
-m4-300-노푸
부동 소수점 단위가 아닌 방식으로 SH4-300용 코드 생성
익숙한.
-m4-300-단일
배정밀도 부동 소수점이 없는 방식으로 SH4-300용 코드를 생성합니다.
조작이 사용됩니다.
-m4-300-단일 전용
배정밀도 부동 소수점이 없는 방식으로 SH4-300용 코드를 생성합니다.
조작이 사용됩니다.
-m4-340
SH4-340용 코드를 생성합니다(MMU 없음, FPU 없음).
-m4-500
SH4-500용 코드 생성(FPU 없음). 패스 -isa=sh4-노프푸 어셈블러에게.
-m4a-노푸
SH4al-dsp 또는 SH4a에 대한 코드를 부동 소수점이
단위는 사용하지 않습니다.
-m4a-단일 전용
배정밀도 부동 소수점이 없는 방식으로 SH4a용 코드를 생성합니다.
조작이 사용됩니다.
-m4a-단일
부동 소수점 단위가 단정밀도라고 가정하고 SH4a에 대한 코드 생성
기본적으로 모드.
-m4a
SH4a용 코드를 생성합니다.
-m4al
과 동일 -m4a-노푸, 암시적으로 전달되는 것을 제외하고 -dsp 어셈블러에게. GCC
현재로서는 DSP 명령어를 생성하지 않습니다.
-m5-32미디어
SHmedia용 32비트 코드를 생성합니다.
-m5-32미디어-노푸
부동 소수점 단위가 아닌 방식으로 SHmedia용 32비트 코드를 생성합니다.
익숙한.
-m5-64미디어
SHmedia용 64비트 코드를 생성합니다.
-m5-64미디어-노푸
부동 소수점 단위가 아닌 방식으로 SHmedia용 64비트 코드를 생성합니다.
익숙한.
-m5-컴팩트
SHcompact용 코드를 생성합니다.
-m5-컴팩트-nofpu
부동 소수점 단위가 사용되지 않는 방식으로 SHcompact용 코드를 생성하십시오.
-mb 빅 엔디안 모드에서 프로세서에 대한 코드를 컴파일합니다.
-ml 리틀 엔디안 모드에서 프로세서용 코드를 컴파일합니다.
-mdalign
64비트 경계에서 두 배를 정렬합니다. 이것은 호출 규칙을 변경합니다.
따라서 표준 C 라이브러리의 일부 기능은 다시 컴파일하지 않는 한 작동하지 않습니다.
그것으로 먼저 -mdalign.
-mrelax
가능하면 링크 시간에 일부 주소 참조를 줄이십시오. 링커 옵션을 사용
-편하게 하다.
-mbigtable
"스위치" 테이블에서 32비트 오프셋을 사용하십시오. 기본값은 16비트 오프셋을 사용하는 것입니다.
-엠비탑스
SH2A에서 비트 조작 명령어 사용을 활성화합니다.
-mfmovd
"fmovd" 명령 사용을 활성화합니다. 확인하다 -mdalign 정렬 제약 조건에 대해.
-므레네사스
Renesas가 정의한 호출 규칙을 준수합니다.
-mno-르네사스
Renesas 규칙 이전에 GCC에 대해 정의된 호출 규칙을 준수합니다.
이용 가능했습니다. 이 옵션은 SH 도구 체인의 모든 대상에 대한 기본값입니다.
-mnomac저장
"MAC" 레지스터를 call-clobbed로 표시합니다. -므레네사스 주어진다.
-이따
-mno-ieee
처리에 영향을 미치는 부동 소수점 비교의 IEEE 규정 준수 제어
비교 결과가 정렬되지 않은 경우. 기본적으로 -이따 is
암시적으로 활성화됩니다. 만약에 - 유한 수학 전용 사용 가능 -mno-ieee 암시적으로 설정되며,
결과적으로 더 빠른 부동 소수점 비교가 더 빠릅니다. NS
암시적 설정은 다음 중 하나를 지정하여 재정의할 수 있습니다. -이따 or -mno-ieee.
-minline-ic_invalidate
중첩 함수를 설정한 후 명령어 캐시 항목을 무효화하는 인라인 코드
트램폴린. 이 옵션은 다음과 같은 경우 효과가 없습니다. -muser 모드 유효하고 선택된
코드 생성 옵션(예: -m4) "icbi" 명령어의 사용을 허용하지 않습니다.
선택한 코드 생성 옵션이 "icbi"의 사용을 허용하지 않는 경우
지시, 그리고 -muser 모드 유효하지 않은 경우 인라인 코드는
연관 쓰기와 직접 명령어 캐시 주소 배열. 이 뿐만 아니라
런타임에 특권 모드가 필요하지만 캐시 라인이
TLB를 통해 매핑되고 매핑 해제되었습니다.
-사이즈를 잘못 맞추다
어셈블리 코드의 덤프 명령어 크기 및 위치.
-mpadstruct
이 옵션은 더 이상 사용되지 않습니다. 구조를 4바이트의 배수로 채웁니다.
SH ABI와 호환되지 않습니다.
-원자 모델=모델
원자 연산 모델과 추가 매개변수를 쉼표로 구분하여 설정합니다.
목록. 원자 내장 함수에 대한 자세한 내용은 다음을 참조하십시오. __원자 빌트인. 그만큼
다음 모델 및 매개변수가 지원됩니다.
없음
컴파일러에서 생성된 원자 시퀀스를 비활성화하고 원자에 대한 라이브러리 호출을 내보냅니다.
작업. 대상이 "sh*-*-linux*"가 아닌 경우 기본값입니다.
소프트구사
원자 내장을 위한 GNU/Linux 호환 gUSA 소프트웨어 원자 시퀀스 생성
기능에서. 생성된 원자 시퀀스는 추가 지원이 필요합니다.
시스템의 인터럽트/예외 처리 코드이며 SH3* 및
SH4* 단일 코어 시스템. 이 옵션은 대상이 다음과 같을 때 기본적으로 활성화됩니다.
"sh*-*-linux*" 및 SH3* 또는 SH4*. 대상이 SH4A인 경우 이 옵션도
하드웨어 원자 명령어 "movli.l" 및 "movco.l"을 부분적으로 활용하여
더 효율적인 코드를 생성하지 않는 한 엄격한 이 지정됩니다.
소프트 tcb
스레드 제어에서 변수를 사용하는 소프트웨어 원자 시퀀스 생성
블록. 이것은 SH1*에서도 사용할 수 있는 gUSA 시퀀스의 변형입니다.
및 SH2* 표적. 생성된 원자 시퀀스에서 추가 지원이 필요합니다.
시스템의 인터럽트/예외 처리 코드이며 다음에만 적합합니다.
단일 코어 시스템. 이 모델을 사용할 때, gbr 오프셋 = 매개변수는 다음과 같아야 합니다.
도 지정합니다.
소프트 아이마스크
설정하여 인터럽트를 일시적으로 비활성화하는 소프트웨어 원자 시퀀스 생성
"SR.IMASK = 1111". 이 모델은 프로그램이 특권 모드에서 실행될 때만 작동합니다.
단일 코어 시스템에만 적합합니다. 추가 지원
시스템의 인터럽트/예외 처리 코드는 필요하지 않습니다. 이 모델은
대상이 "sh*-*-linux*"이고 SH1* 또는 SH2*인 경우 기본적으로 활성화됩니다.
하드-llcs
"movli.l" 및 "movco.l" 명령어를 사용하여 하드웨어 원자 시퀀스 생성
오직. 이것은 SH4A에서만 사용할 수 있으며 멀티 코어 시스템에 적합합니다.
하드웨어 명령어는 32에 대한 8비트 원자 변수 액세스만 지원하기 때문에
또는 16비트 변수는 32비트 액세스로 에뮬레이트됩니다. 이것으로 컴파일된 코드
옵션은 다른 소프트웨어 원자 모델 인터럽트/예외와도 호환됩니다.
SH4A 시스템에서 실행되는 경우 처리 시스템. 추가 지원
이 모델에는 시스템의 인터럽트/예외 처리 코드가 필요하지 않습니다.
gbr 오프셋 =
이 매개변수는 스레드 제어에서 변수의 오프셋(바이트)을 지정합니다.
생성된 원자 시퀀스에 의해 사용되어야 하는 블록 구조
소프트 tcb 모델이 선정되었습니다. 다른 모델의 경우 이 매개변수는 무시됩니다.
지정된 값은 0의 정수 배수여야 하며 범위는 1020-XNUMX입니다.
엄격한
이 매개변수는 여러 원자 모델의 혼합 사용을 방지합니다.
호환 가능하고 컴파일러가 지정된 원자 시퀀스를 생성하도록 합니다.
모델만.
-mtas
"__atomic_test_and_set"에 대한 "tas.b" opcode를 생성합니다. 에 따라 주의
특정 하드웨어 및 소프트웨어 구성으로 인해 전체 성능이 저하될 수 있습니다.
"tas.b" 명령어가 암시하는 피연산자 캐시 라인 플러시 때문입니다. 에
멀티 코어 SH4A 프로세서 "ta.b" 명령어는 주의해서 사용해야 합니다.
특정 캐시 구성에 대한 데이터 손상이 발생할 수 있습니다.
-mpfergot
위치 독립적인 코드를 생성할 때 전역 오프셋을 사용하여 함수 호출을 내보냅니다.
프로시저 연결 테이블 대신 테이블.
-muser 모드
-mno-사용자 모드
컴파일러가 특권 모드 코드를 생성하는 것을 허용(허용)하지 마십시오. 지정
-muser 모드 또한 의미 -mno-inline-ic_invalidate 인라인 코드가 작동하지 않는 경우
사용자 모드에서. -muser 모드 대상이 "sh*-*-linux*"인 경우 기본값입니다. 만약
대상은 SH1* 또는 SH2*입니다. -muser 모드 사용자 모드가 없기 때문에 아무 효과가 없습니다.
-다중 비용=번호
다중 숙박 시설에 대해 가정할 비용을 설정합니다.
-mdiv=전략
정수 나눗셈 연산에 사용할 나눗셈 전략을 설정합니다. SH미디어용
전략 다음 중 하나일 수 있습니다.
fp 부동 소수점 연산을 수행합니다. 이것은 매우 높은 대기 시간을 갖지만 다음이 필요합니다.
몇 가지 지침만 있으므로 코드에 충분한
컴파일러가 부동 소수점을 예약할 수 있도록 쉽게 악용할 수 있는 ILP
다른 지침과 함께 지침. XNUMX으로 나누면
부동 소수점 예외.
INV 정수 연산을 사용하여 제수의 역수를 계산한 다음
배당금에 역수를 곱합니다. 이 전략은 CSE 및 호이스팅을 허용합니다.
역 계산의. XNUMX으로 나누기는 지정되지 않은 결과를 계산하고,
그러나 트랩하지 않습니다.
인보이스:민라트
의 변형 INV CSE 또는 호이스팅 기회가 발견되지 않은 경우 또는
전체 작업이 같은 장소로 호이스트되었습니다.
역 계산은 전체를 줄이기 위해 최종 곱셈과 얽혀 있습니다.
몇 가지 더 많은 명령을 사용하여 더 적은 수의
다른 코드로 기회를 예약합니다.
전화
일반적으로 구현하는 라이브러리 함수를 호출합니다. 인보이스:민라트 전략. 이것
"m5-*media-nofpu" 컴파일에 높은 코드 밀도를 제공합니다.
call2
동일한 라이브러리 함수의 다른 진입점을 사용합니다.
룩업 테이블에 대한 포인터가 이미 설정되어 있어 포인터 로드가 노출됩니다.
CSE 및 코드 호이스팅 최적화.
인보이스:콜
인보이스:콜2
인보이스:FP
사용 INV 초기 코드 생성을 위한 알고리즘이지만 코드가 유지되는 경우
최적화되지 않은 상태로 되돌리기 전화, call2및 fp 전략, 각각. 참고
XNUMX으로 나누기의 잠재적인 트래핑 부작용은 별도의
모든 정수 명령어가 호이스트 아웃되는 것이 가능합니다.
그러나 부작용에 대한 마커는 그대로 유지됩니다. 에 대한 재조합
이 경우 부동 소수점 연산이나 호출이 불가능합니다.
inv20u
inv20l
의 변종 인보이스:민라트 전략. 역계산의 경우
곱하기에서 분리되지 않고 배당금이 맞는 나눗셈을 가속화합니다.
여러 번호를 건너뛰는 테스트를 삽입하여 20비트(해당되는 경우 더하기 기호)로
이 경우 작업; 이 테스트는 더 큰 배당금의 경우 속도를 늦춥니다.
inv20u 그러한 작은 배당금의 경우는 가능성이 없다고 가정하고, inv20l
가능성이 있다고 가정합니다.
SHmedia 이외의 대상용 전략 다음 중 하나일 수 있습니다.
전화 div1
단일 단계 나누기 명령 "div1"을 사용하여 라이브러리 함수를 호출하여
작업을 수행합니다. XNUMX으로 나누기는 지정되지 않은 결과를 계산하고 다음을 수행합니다.
트랩이 아닙니다. 이것은 SH4, SH2A 및 SHcompact를 제외한 기본값입니다.
호출 fp
배정밀도 부동에서 연산을 수행하는 라이브러리 함수를 호출합니다.
가리키다. XNUMX으로 나누면 부동 소수점 예외가 발생합니다. 이것은 기본값입니다
FPU가 있는 SHcompact용. double이 없는 대상에 대해 이것을 지정합니다.
정밀도 FPU의 기본값은 "call-div1"입니다.
콜 테이블
작은 제수에 대한 조회 테이블을 사용하는 라이브러리 함수를 호출하고
더 큰 제수에 대한 대소문자 구분이 있는 "div1" 명령어. XNUMX으로 나누기
지정되지 않은 결과를 계산하고 트랩하지 않습니다. 이것은 SH4의 기본값입니다.
동적 이동 지침 기본값이 없는 대상에 대해 이를 지정합니다.
"call-div1"에.
분할 전략이 지정되지 않은 경우 기본 전략이 다음을 기반으로 선택됩니다.
현재 대상에. SH2A의 경우 기본 전략은 "divs" 및 "divu"를 사용하는 것입니다.
라이브러리 함수 호출 대신 명령.
-maccumulate-outgoing-args
주변이 아닌 함수 프롤로그에서 나가는 인수를 위해 공간을 한 번 예약하십시오.
각 호출. 일반적으로 성능과 크기에 유리합니다. 긴장을 푸는 데에도 필요
조건부 코드 주변의 스택 프레임 변경을 방지합니다.
-mdivsi3_libfunc=name
32비트 부호 있는 나누기에 사용되는 라이브러리 함수의 이름을 다음으로 설정합니다. name. 이
에 사용된 이름에만 영향을 미칩니다. 전화 and 인보이스:콜 분할 전략, 그리고
컴파일러는 여전히 동일한 입력/출력/클로버 레지스터 세트를 예상합니다.
옵션이 없었습니다.
-m고정 범위=레지스터 범위
주어진 레지스터 범위를 고정 레지스터로 취급하는 코드를 생성합니다. 고정 레지스터
레지스터 할당자가 사용할 수 없는 것입니다. 이것은 커널을 컴파일할 때 유용합니다.
암호. 레지스터 범위는 대시로 구분된 두 개의 레지스터로 지정됩니다. 다수의
레지스터 범위는 쉼표로 구분하여 지정할 수 있습니다.
-mindexed 주소 지정
SHmedia32/SHcompact에 대해 인덱스 주소 지정 모드를 사용하도록 설정합니다. 이것은 단지
하드웨어 및/또는 OS가 인덱싱된 32비트 랩어라운드 의미 체계를 구현하는 경우 안전합니다.
주소 지정 모드. 아키텍처를 통해 64비트 프로세서를 구현할 수 있습니다.
OS가 32비트 주소 지정을 얻는 데 사용할 수 있지만 현재 하드웨어가 없기 때문에 MMU
구현은 인덱싱된 주소 지정 모드를 안전하게 만들기 위해 이 방법 또는 다른 방법을 지원합니다.
32비트 ABI에서 사용하려면 기본값은 -mno 인덱스 주소 지정.
-mgettr비용=번호
"gettr" 명령에 대해 가정한 비용을 다음으로 설정합니다. 번호. 기본값은 2입니다.
-mpt 고정 유효하지 않으면 100입니다.
-mpt 고정
"pt*" 명령어가 트랩되지 않는다고 가정합니다. 이것은 일반적으로 더 나은 스케줄링된 코드를 생성합니다.
그러나 현재 하드웨어에서는 안전하지 않습니다. 현재 아키텍처 정의에 따르면
"ptabs" 및 "ptrel"은 대상 anded가 3일 때 트랩됩니다.
사전에 이러한 지침을 예약하는 것이 안전하지 않게 만드는 의도하지 않은 영향
분기하거나 루프에서 끌어올립니다. 예를 들어, "__do_global_ctors"는
libgcc 프로그램 시작 시 생성자를 실행하고 다음과 같은 목록의 함수를 호출합니다.
-1로 구분됩니다. 이랑 -mpt 고정 옵션, "ptabs"는 테스트 전에 수행됩니다.
반대 -1. 즉, 모든 생성자가 조금 더 빠르게 실행되지만
루프가 목록의 끝에 오면 "ptabs"가 -1을 로드하기 때문에 프로그램이 충돌합니다.
대상 레지스터.
이 옵션은 현재 아키텍처를 구현하는 모든 하드웨어에 안전하지 않기 때문에
사양, 기본값은 -mno-pt 고정. 명시적으로 지정하지 않는 한
-mgettr비용, -mno-pt 고정 또한 의미 -mgtrcost=100; 이것은 등록을 방해합니다
일반 정수를 저장하기 위해 대상 레지스터를 사용하여 할당합니다.
-최소 유효 기호
기호가 유효하지 않을 수 있다고 가정합니다. 컴파일러에서 생성한 일반 함수 기호
"movi"/"shori"/"ptabs" 또는 "movi"/"shori"/"ptrel"로 로드하는 데 항상 유효하지만
어셈블러 및/또는 링커 트릭을 사용하면
"ptabs" 또는 "ptrel"을 사용하여 트랩합니다. 이 옵션은 다음과 같은 경우에만 의미가 있습니다. -mno-pt 고정 에
효과. 기본 블록 간 CSE, 호이스팅 및 대부분의 심볼 스케줄링을 방지합니다.
잔뜩. 기본값은 -mno-무효 기호.
-mbranch 비용=NUM
취하다 NUM 분기 명령에 대한 비용이 됩니다. 숫자가 높을수록 컴파일러가
가능하면 더 많은 분기 없는 코드를 생성하십시오. 지정되지 않은 경우 값은
컴파일되는 프로세서 유형에 따라 선택됩니다.
-mzdc분기
-mno-zdc브랜치
제로 변위 조건 분기 명령어 "bt" 및
"bf"는 빠릅니다. 만약에 -mzdc분기 가 지정되면 컴파일러는 XNUMX 변위를 선호합니다.
분기 코드 시퀀스. SH4 및
SH4A. 다음을 지정하여 명시적으로 비활성화할 수 있습니다. -mno-zdc브랜치.
-mcbranch-force-delay-slot
지연 슬롯을 채우는 조건부 분기에 대해 지연 슬롯을 강제로 사용합니다.
적절한 지침을 찾을 수 없는 경우 "아니오"와 함께. 기본적으로 이 옵션은
장애가있는. 원본에서 발견된 하드웨어 버그를 해결하도록 활성화할 수 있습니다.
SH7055.
-머퓨즈드-매드
-mno-융합-매드
부동 소수점 곱하기 및 누적을 사용(사용하지 않음)하는 코드 생성
지침. 이러한 명령어는 하드웨어 부동 소수점 경우 기본적으로 생성됩니다.
사용. 기계 의존 -머퓨즈드-매드 이제 옵션이 시스템에 매핑됩니다.
독립 -ffp-계약=빠른 옵션 및 -mno-융합-매드 매핑됩니다
-ffp-계약=해제.
-mfsca
-mno-fsca
컴파일러가 사인 및 코사인에 대해 "fsca" 명령을 내보내도록 허용하거나 허용하지 않습니다.
근사치. 옵션 -mfsca 와 함께 사용해야 합니다.
-재미있는 수학 최적화. SH4A용 코드를 생성할 때 기본적으로 활성화됩니다.
사용 -mno-fsca 다음과 같은 경우에도 사인 및 코사인 근사를 비활성화합니다.
-재미있는 수학 최적화 유효합니다.
-mfsrra
-mno-fsrra
컴파일러가 역제곱에 대해 "fsrra" 명령을 내보내도록 허용하거나 허용하지 않습니다.
루트 근사. 옵션 -mfsrra 와 함께 사용해야 합니다.
-재미있는 수학 최적화 and - 유한 수학 전용. 다음과 같은 경우 기본적으로 활성화됩니다.
SH4A용 코드 생성. 사용 -mno-fsrra 역 제곱근을 비활성화합니다.
경우에도 근사치 -재미있는 수학 최적화 and - 유한 수학 전용 에있다
효과.
-척-cmove
조건부 이동 명령에 대해 제로 변위 조건부 분기를 선호합니다.
패턴. 이로 인해 SH4 프로세서에서 더 빠른 코드가 생성될 수 있습니다.
솔라리스 2 옵션
Bowman의 -m 옵션은 Solaris 2에서 지원됩니다.
-mclear-hwcap
-mclear-hwcap 컴파일러에 의해 생성된 하드웨어 기능을 제거하도록 지시합니다.
솔라리스 어셈블러. 이것은 목적 파일이 ISA 확장자를 사용하지 않을 때만 필요합니다.
현재 시스템에서 지원하지만 런타임에 사용 여부를 확인하십시오.
-불순한 텍스트
-불순한 텍스트, 이외에 사용 -공유, 컴파일러에게 전달하지 않도록 지시합니다. -z 본문 에
공유 개체를 연결할 때 링커. 이 옵션을 사용하여 위치를 연결할 수 있습니다.
종속 코드를 공유 개체로.
-불순한 텍스트 "재배치는 할당 가능하지만 쓰기 불가능에 대해 유지됩니다.
섹션" 링커 오류 메시지가 표시됩니다. 그러나 필요한 재배치는 copy-on-
쓰기 및 공유 개체는 실제로 프로세스 간에 공유되지 않습니다. 대신에
사용 -불순한 텍스트, 모든 소스 코드를 다음으로 컴파일해야 합니다. -fpic or -fPIC.
이러한 스위치는 Solaris 2에서 위에 추가로 지원됩니다.
-pthread
POSIX 스레드 라이브러리를 사용하여 멀티스레딩에 대한 지원을 추가합니다. 이 옵션은
전처리기와 링커 모두에 대한 플래그입니다. 이 옵션은 스레드에 영향을 미치지 않습니다.
컴파일러 또는 컴파일러와 함께 제공되는 라이브러리에 의해 생성된 개체 코드의 안전성.
-pthread
이것은 동의어입니다 -pthread.
SPARC 옵션
Bowman의 -m 옵션은 SPARC에서 지원됩니다.
-mno-app-regs
-map-regs
지정 -map-regs 전역 레지스터 2~4를 사용하여 출력을 생성합니다.
SPARC SVR4 ABI는 애플리케이션용으로 예약되어 있습니다. 전역 레지스터 1과 마찬가지로 각 전역
레지스터 2에서 4는 다음으로 클로버되는 할당 가능한 레지스터로 처리됩니다.
함수 호출. 이것이 기본값입니다.
일부 성능 손실을 감수하고 완전히 SVR4 ABI를 준수하려면 다음을 지정하십시오.
-mno-app-regs. 이 옵션을 사용하여 라이브러리와 시스템 소프트웨어를 컴파일해야 합니다.
-m플랫
-mno-플랫
와 -m플랫, 컴파일러는 저장/복원 명령을 생성하지 않고
"플랫" 또는 단일 레지스터 창 모델. 이 모델은 일반
윈도우 모델을 등록합니다. 로컬 레지스터와 입력 레지스터(0--5)는 여전히
"호출 저장" 레지스터로 취급되며 필요에 따라 스택에 저장됩니다.
와 -mno-플랫 (기본값), 컴파일러는 저장/복원 명령을 생성합니다(예외
리프 함수의 경우). 이것은 정상 작동 모드입니다.
-mfpu
-mhard-float
부동 소수점 명령어가 포함된 출력을 생성합니다. 이것이 기본값입니다.
-mno-fpu
-msoft-float
부동 소수점에 대한 라이브러리 호출이 포함된 출력을 생성합니다. 경고: 필수
모든 SPARC 대상에 대해 라이브러리를 사용할 수 있는 것은 아닙니다. 일반적으로 시설의
기계의 일반적인 C 컴파일러가 사용되지만 이것은 교차에서 직접 수행될 수 없습니다.
편집. 적절한 라이브러리를 제공하기 위해 스스로 준비해야 합니다.
크로스 컴파일을 위한 함수 임베디드 타겟 스파크-*-아웃 and 스파클라이트-*-*
소프트웨어 부동 소수점 지원을 제공하십시오.
-msoft-float 출력 파일의 호출 규칙을 변경합니다. 그러므로 그것은 단지
컴파일하면 유용합니다. 모든 이 옵션이 있는 프로그램의 특히, 당신은
편집하다 libgcc.a, GCC와 함께 제공되는 라이브러리, -msoft-float 이를 위해
작동합니다.
-mhard-quad-float
쿼드 워드(long double) 부동 소수점 명령어를 포함하는 출력을 생성합니다.
-msoft-쿼드-플로트
쿼드 워드(long double) 부동 소수점에 대한 라이브러리 호출을 포함하는 출력 생성
지침. 호출된 기능은 SPARC ABI에 지정된 기능입니다. 이것이
태만.
이 글을 쓰는 시점에서 하드웨어를 지원하는 SPARC 구현은 없습니다.
쿼드 워드 부동 소수점 명령어. 그들은 모두 다음 중 하나에 대한 트랩 처리기를 호출합니다.
이러한 명령을 수행하면 트랩 처리기가 명령의 효과를 에뮬레이트합니다.
트랩 핸들러 오버헤드로 인해 ABI 라이브러리를 호출하는 것보다 훨씬 느립니다.
루틴. 그래서 -msoft-쿼드-플로트 옵션이 기본값입니다.
-mno-unaligned-double
-munaligned-더블
double에는 8바이트 정렬이 있다고 가정합니다. 이것이 기본값입니다.
와 -munaligned-더블, GCC는 double이 다음과 같은 경우에만 8바이트 정렬을 갖는다고 가정합니다.
다른 유형에 포함되거나 절대 주소가 있는 경우. 그렇지 않으면
4바이트 정렬이 있다고 가정합니다. 이 옵션을 지정하면 일부 희귀
다른 컴파일러에 의해 생성된 코드와의 호환성 문제. 기본값이 아닙니다.
특히 부동 소수점 코드의 경우 성능 손실이 발생하기 때문입니다.
-muser 모드
-mno-사용자 모드
감독자 모드에서만 실행할 수 있는 코드를 생성하지 마십시오. 이것은 다음에 대해서만 관련이 있습니다.
LEON3 프로세서에 대해 내보낸 "casa" 명령. 이것이 기본값입니다.
-mno-빠른 구조
-mfaster-구조체
와 -mfaster-구조체, 컴파일러는 구조에 8바이트가 있어야 한다고 가정합니다.
조정. 이를 통해 사본에 대해 "ldd" 및 "std" 명령어 쌍을 사용할 수 있습니다.
구조 할당에서 "ld" 및 "st" 쌍의 두 배 대신. 그러나, 그
이 변경된 정렬을 사용하면 SPARC ABI를 직접 위반합니다. 따라서 의도된
개발자가 결과 코드가 다음과 같다고 인정하는 대상에만 사용
ABI의 규칙과 직접적으로 일치하지 않습니다.
-mcpu =CPU_유형
명령어 세트, 레지스터 세트 및 명령어 스케줄링 매개변수 설정
기계 유형 CPU_유형. 지원되는 값 CPU_유형 are v7, 사이프러스, v8, 초석,
하이퍼스파크, 레온, leon3, 레온3v7, 스파클라이트, f930, f934, 스파클라이트86x, 스파클렛,
tsc701, v9, 극초단파, 극초단파3, 나이아가라, 나이아가라 2, 나이아가라 3 and 나이아가라 4.
기본 Solaris 및 GNU/Linux 도구 모음도 값을 지원합니다. 출신, 선택
호스트 프로세서를 위한 최고의 아키텍처 옵션입니다. -mcpu=네이티브 경우에는 효과가 없습니다
GCC가 프로세서를 인식하지 못합니다.
기본 명령어 스케줄링 매개변수는 다음을 선택하는 값에 사용됩니다.
구현이 아니라 아키텍처입니다. 이것들은 v7, v8, 스파클라이트, 스파클렛, v9.
다음은 지원되는 각 아키텍처 및 지원되는 구현 목록입니다.
v7 사이프러스, leon3v7
v8 슈퍼스파크, 하이퍼스파크, 레온, 레온3
스파클라이트
f930, f934, 스파클라이트86x
스파클렛
tsc701
v9 ultrasparc, ultrasparc3, 나이아가라, 나이아가라2, 나이아가라3, 나이아가라4
기본적으로(달리 구성하지 않는 한) GCC는 V7 변형에 대한 코드를 생성합니다.
SPARC 아키텍처. 와 함께 -mcpu=사이프러스, 컴파일러는 추가로 최적화합니다.
SPARCStation/SPARCServer 7xx 시리즈에서 사용되는 Cypress CY602C3 칩. 이것은
또한 이전 SPARCStation 1, 2, IPX 등에 적합합니다.
와 -mcpu=v8, GCC는 SPARC 아키텍처의 V8 변형에 대한 코드를 생성합니다. NS
V7 코드와의 유일한 차이점은 컴파일러가 정수 곱하기 및
SPARC-V8에는 있지만 SPARC-V7에는 없는 정수 나누기 명령어. 와 함께
-mcpu=슈퍼스파크, 컴파일러는 SuperSPARC 칩에 대해 추가로 최적화합니다.
SPARCStation 10, 1000 및 2000 시리즈에서 사용됩니다.
와 -mcpu=스파클라이트, GCC는 SPARC의 SPARClite 변형에 대한 코드를 생성합니다.
건축학. 이것은 정수 곱하기, 정수 나누기 단계 및 스캔("ffs")을 추가합니다.
SPARClite에는 있지만 SPARC-V7에는 없는 명령어. 와 함께 -mcpu=f930Walk Through California 프로그램,
컴파일러는 원래 Fujitsu MB86930 칩에 대해 추가로 최적화합니다.
FPU가 없는 SPARClite. 와 함께 -mcpu=f934, 컴파일러는 추가로 최적화합니다.
FPU가 있는 최신 SPARClite인 Fujitsu MB86934 칩.
와 -mcpu=스파클렛, GCC는 SPARC의 SPARClet 변형에 대한 코드를 생성합니다.
건축학. 이것은 정수 곱하기, 곱하기/누적하기, 정수 나누기를 추가합니다.
SPARClet에는 있지만 SPARC-V7에는 없는 단계 및 스캔("ffs") 명령. 와 함께
-mcpu=tsc701, 컴파일러는 TEMIC SPARClet 칩에 대해 추가로 최적화합니다.
와 -mcpu=v9, GCC는 SPARC 아키텍처의 V9 변형에 대한 코드를 생성합니다. 이것
64비트 정수 및 부동 소수점 이동 명령어 추가, 3개의 추가 부동 소수점
조건 코드 레지스터 및 조건부 이동 명령. 와 함께 -mcpu=울트라스파크,
컴파일러는 Sun UltraSPARC I/II/IIi 칩에 대해 추가로 최적화합니다. 와 함께
-mcpu=ultraparc3, 컴파일러는 Sun UltraSPARC에 대해 추가로 최적화합니다.
III/III+/IIIi/IIIi+/IV/IV+ 칩. 와 함께 -mcpu=나이아가라, 컴파일러는 추가로
Sun UltraSPARC T1 칩에 최적화합니다. 와 함께 -mcpu=나이아가라2, 컴파일러
Sun UltraSPARC T2 칩에 대해 추가로 최적화합니다. 와 함께 -mcpu=나이아가라3Walk Through California 프로그램,
컴파일러는 Sun UltraSPARC T3 칩에 대해 추가로 최적화합니다. 와 함께 -mcpu=나이아가라4,
컴파일러는 Sun UltraSPARC T4 칩에 대해 추가로 최적화합니다.
-mtune=CPU_유형
머신 유형에 대한 명령어 스케줄링 매개변수 설정 CPU_유형, 그러나 설정하지 마십시오
옵션을 나타내는 명령어 세트 또는 레지스터 세트 -mcpu =CPU_유형 않습니다.
에 대한 동일한 값 -mcpu =CPU_유형 사용할 수 있습니다 -mtune=CPU_유형, 그러나 유일한
유용한 값은 특정 CPU 구현을 선택하는 값입니다. 사람들은
사이프러스, 초석, 하이퍼스파크, 레온, leon3, 레온3v7, f930, f934, 스파클라이트86x,
tsc701, 극초단파, 극초단파3, 나이아가라, 나이아가라 2, 나이아가라 3 and 나이아가라 4. 과
기본 Solaris 및 GNU/Linux 도구 모음, 출신 또한 사용될 수있다.
-mv8plus
-mno-v8plus
와 -mv8plus, GCC는 SPARC-V8+ ABI용 코드를 생성합니다. V8과의 차이점
ABI는 전역 및 출력 레지스터가 64비트 너비로 간주된다는 것입니다. 이것은 활성화되어 있습니다
기본적으로 모든 SPARC-V32 프로세서에 대해 9비트 모드의 Solaris.
-mvis
-mno-vis
와 -mvis, GCC는 UltraSPARC Visual을 활용하는 코드를 생성합니다.
명령어 세트 확장. 기본값은 -mno-vis.
-mvis2
-mno-vis2
와 -mvis2, GCC는 UltraSPARC 버전 2.0을 활용하는 코드를 생성합니다.
비주얼 명령어 세트 확장. 기본값은 -mvis2 CPU를 타겟팅할 때
UltraSPARC-III 이상과 같은 명령을 지원합니다. 환경 -mvis2 또한
세트 -mvis.
-mvis3
-mno-vis3
와 -mvis3, GCC는 UltraSPARC 버전 3.0을 활용하는 코드를 생성합니다.
비주얼 명령어 세트 확장. 기본값은 -mvis3 CPU를 타겟팅할 때
niagara-3 이상과 같은 지침을 지원합니다. 환경 -mvis3 또한 세트
-mvis2 and -mvis.
-mcbcond
-mno-cbcond
와 -mcbcond, GCC는 비교 및 분기를 활용하는 코드를 생성합니다.
Sparc Architecture 2011에 정의된 지침입니다. 기본값은 -mcbcond 언제
niagara-4 이상과 같이 이러한 명령을 지원하는 CPU를 대상으로 합니다.
-mpoc
-mno-popc
와 -mpoc, GCC는 UltraSPARC 모집단을 활용하는 코드를 생성합니다.
계산 지시. 기본값은 -mpoc 이러한 기능을 지원하는 CPU를 대상으로 할 때
Niagara-2 이상과 같은 지침.
-mfmaf
-mno-fmaf
와 -mfmaf, GCC는 UltraSPARC Fused Multiply-
부동 소수점 확장을 추가합니다. 기본값은 -mfmaf CPU를 타겟팅할 때
Niagara-3 이상과 같은 지침을 지원합니다.
-mfix-at697f
Atmel AT697F 프로세서의 단일 정오표에 대해 문서화된 해결 방법을 활성화합니다.
(AT13E 프로세서의 정오표 #697에 해당).
-mfix-ut699
부동 소수점 정오표 및 데이터 캐시에 대해 문서화된 해결 방법을 활성화합니다.
UT699 프로세서의 정오표를 무효화합니다.
Bowman의 -m 옵션은 9비트의 SPARC-V64 프로세서에서 위에 추가로 지원됩니다.
환경 :
-m32
-m64
32비트 또는 64비트 환경용 코드를 생성합니다. 32비트 환경은 int,
long 및 32비트에 대한 포인터입니다. 64비트 환경은 int를 32비트로 설정하고 long 및
64비트에 대한 포인터.
-mc모델=어느
코드 모델을 다음 중 하나로 설정합니다.
메들로
중간/낮음 코드 모델: 64비트 주소, 프로그램은 낮은 32비트로 연결되어야 합니다.
메모리 비트. 프로그램은 정적으로 또는 동적으로 링크될 수 있습니다.
중간
중간/중간 코드 모델: 64비트 주소, 프로그램은 낮은
44비트 메모리, 텍스트 및 데이터 세그먼트의 크기는 2GB 미만이어야 하며
데이터 세그먼트는 텍스트 세그먼트의 2GB 이내에 있어야 합니다.
메다니
Medium/Anywhere 코드 모델: 64비트 주소, 프로그램은 어디에서나 링크될 수 있음
메모리에서 텍스트 및 데이터 세그먼트의 크기는 2GB 미만이어야 하며 데이터는
세그먼트는 텍스트 세그먼트의 2GB 이내에 있어야 합니다.
엠메다니
임베디드 시스템을 위한 Medium/Anywhere 코드 모델: 64비트 주소, 텍스트
데이터 세그먼트는 크기가 2GB 미만이어야 하며 둘 다 메모리의 아무 곳에서나 시작해야 합니다.
(링크 시간에 결정됨). 전역 레지스터 %g4는 데이터의 기준을 가리킵니다.
분절. 프로그램은 정적으로 연결되어 있으며 PIC는 지원되지 않습니다.
-메모리 모델=메모리 모델
프로세서에 적용되는 메모리 모델을 다음 중 하나로 설정합니다.
디폴트 값
프로세서 및 운영 체제의 기본 메모리 모델입니다.
rmo 릴렉스 메모리 오더
pso 부분 상점 주문
tso 총 매장 주문
sc 순차 일관성
이러한 메모리 모델은 Sparc V9 아키텍처의 부록 D에 공식적으로 정의되어 있습니다.
프로세서의 "PSTATE.MM" 필드에 설정된 대로 수동.
-mstack 바이어스
-mno-스택-바이어스
와 -mstack 바이어스, GCC는 스택 포인터와 프레임 포인터(있는 경우),
스택 프레임 참조를 만들 때 다시 추가해야 하는 -2047만큼 오프셋됩니다. 이것
64비트 모드의 기본값입니다. 그렇지 않으면 그러한 오프셋이 존재하지 않는다고 가정합니다.
SPU 옵션
Bowman의 -m 옵션은 SPU에서 지원됩니다.
-Mwarn-Reloc
-mererror-reloc
SPU용 로더는 동적 재배치를 처리하지 않습니다. 기본적으로 GCC는
동적 재배치가 필요한 코드를 생성할 때 오류가 발생합니다. -mno-오류-재배치
오류를 비활성화하고, -Mwarn-Reloc 대신 경고를 생성합니다.
-msafe-dma
-munsafe-dma
DMA를 시작하거나 완료를 테스트하는 명령은 다음으로 재정렬되어서는 안 됩니다.
액세스 중인 메모리의 로드 및 저장과 관련하여 와 함께 -munsafe-dma
메모리 액세스를 보호하려면 "휘발성" 키워드를 사용해야 하지만
메모리가 변경되지 않는 것으로 알려진 장소의 비효율적인 코드. 마크보다
메모리가 휘발성이므로 사용할 수 있습니다. -msafe-dma 컴파일러에게 DMA를 처리하도록 지시
모든 메모리에 잠재적으로 영향을 미치는 명령.
-mbranch 힌트
기본적으로 GCC는 파이프라인 중단을 피하기 위해 분기 힌트 명령을 생성합니다.
항상 가져 가거나 아마도 가져갈 가지. 힌트는 8보다 가깝게 생성되지 않습니다.
분기에서 멀리 떨어진 지시. 다음을 제외하고는 비활성화할 이유가 거의 없습니다.
디버깅 목적, 또는 개체를 조금 더 작게 만들기 위한 것입니다.
-msmall-mem
-mlarge-mem
기본적으로 GCC는 주소가 18비트보다 크지 않다는 가정 하에 코드를 생성합니다.
와 -mlarge-mem 전체 32비트 주소를 가정하는 코드가 생성됩니다.
-mstdmain
기본적으로 GCC는 SPU 스타일의 주요 기능을 가정하는 시작 코드에 대해 링크합니다.
인터페이스(전통적인 매개변수 목록이 있음). 와 함께 -mstdmain, GCC 링크
"main"에 대한 C99 스타일 인터페이스를 가정하는 시작 코드에 대한 프로그램,
"argv" 문자열의 로컬 복사본을 포함합니다.
-m고정 범위=레지스터 범위
주어진 레지스터 범위를 고정 레지스터로 취급하는 코드를 생성합니다. 고정 레지스터
레지스터 할당자는 사용할 수 없습니다. 이것은 커널을 컴파일할 때 유용합니다.
암호. 레지스터 범위는 대시로 구분된 두 개의 레지스터로 지정됩니다. 다수의
레지스터 범위는 쉼표로 구분하여 지정할 수 있습니다.
-mea32
-mea64
"__ea"를 통해 액세스되는 PPU 주소 공간에 대한 포인터를 가정하여 코드를 컴파일합니다.
명명된 주소 공간 한정자는 32비트 또는 64비트 너비입니다. 기본값은 32비트입니다.
ABI 변경 옵션이므로 실행 파일의 모든 개체 코드를 컴파일해야 합니다.
같은 설정으로.
-maddress 공간 변환
-mno 주소 공간 변환
"__ea" 주소 공간을 일반 주소의 상위 집합으로 처리하는 것을 허용/비허용
우주. 이것은 "__ea"와 제네릭 포인터 사이의 명시적 유형 캐스트를 가능하게 합니다.
"__ea" 포인터에 대한 일반 포인터의 암시적 변환. 기본값은 허용
주소 공간 포인터 변환
-mcache 크기=캐시 크기
이 옵션은 컴파일러가 실행 파일에 연결하는 libgcc 버전을 제어합니다.
"__ea" 주소의 변수에 액세스하기 위해 소프트웨어 관리 캐시를 선택합니다.
특정 캐시 크기의 공간. 가능한 옵션 캐시 크기 are 8, 16, 32, 64
and 128. 기본 캐시 크기는 64KB입니다.
-마토믹 업데이트
-mno-원자 업데이트
이 옵션은 컴파일러가 실행 파일에 연결하는 libgcc 버전을 제어합니다.
PPU 측 변수의 소프트웨어 관리 캐시에 대한 원자 업데이트 여부를 선택합니다.
사용됩니다. 원자 업데이트를 사용하는 경우 다음을 사용하여 SPU 코드에서 PPU 변수로 변경합니다.
"__ea"라는 이름의 주소 공간 한정자는 다른 PPU에 대한 변경을 방해하지 않습니다.
PPU 코드의 동일한 캐시 라인에 있는 변수. 원자를 사용하지 않는 경우
업데이트, 이러한 간섭이 발생할 수 있습니다. 그러나 캐시 라인을 다시 쓰는 것은
효율적인. 기본 동작은 원자적 업데이트를 사용하는 것입니다.
-mdual-nops
-mdual-nops=n
기본적으로 GCC는 증가할 것으로 예상되는 경우 이중 문제를 증가시키기 위해 nops를 삽입합니다.
성능을 제공합니다. n 0에서 10 사이의 값이 될 수 있습니다. n 더 적은 수의 nops를 삽입합니다. 10은
기본값인 0은 다음과 같습니다. -mno-dual-nops. 장애인 - 오스.
-mint-max-nops=n
분기 힌트에 대해 삽입할 최대 nops 수입니다. 분기 힌트는 8 이상이어야 합니다.
영향을 미치는 분기에서 명령을 제거합니다. 최대 GCC 삽입 n 놉
이를 적용하지 않으면 분기 힌트를 생성하지 않습니다.
-mint-max-distance=n
분기 힌트 명령어의 인코딩은 힌트를 256 이내로 제한합니다.
영향을 미치는 지점의 지침입니다. 기본적으로 GCC는
125.
-msafe-힌트
SPU를 무기한 정지시키는 하드웨어 버그를 해결하십시오. 기본적으로 GCC
이 지연이 발생하지 않도록 "hbrp" 명령을 삽입합니다.
옵션 for V
이러한 추가 옵션은 다른 시스템과의 호환성을 위해 System V 릴리스 4에서 사용할 수 있습니다.
해당 시스템의 컴파일러:
-G 공유 개체를 만듭니다. 다음을 수행하는 것이 좋습니다. - 상징적 or -공유 대신 사용하십시오.
-Qy ".ident" 어셈블러에서 컴파일러가 사용하는 각 도구의 버전을 식별합니다.
출력의 지시문.
-Qn 출력 파일에 ".ident" 지시문을 추가하지 마십시오(기본값).
- 응,dirs
디렉토리 검색 dirs로 지정된 라이브러리의 경우 -l.
-음,DIR
디렉토리를 살펴보세요 DIR M4 전처리기를 찾습니다. 어셈블러는 이것을 사용합니다.
옵션을 선택합니다.
타일-Gx 옵션
Bowman의 -m 옵션은 TILE-Gx에서 지원됩니다.
-mcmodel=작은
작은 모델에 대한 코드를 생성합니다. 다이렉트 콜 거리는 500M로 제한됩니다.
어느 방향으로. PC 상대 주소는 32비트입니다. 절대 주소 지원
전체 주소 범위.
-mcmodel=대형
대형 모델에 대한 코드를 생성합니다. 통화 거리 제한이 없습니다.
상대 주소 또는 절대 주소.
-mcpu =name
대상으로 할 CPU 유형을 선택합니다. 현재 지원되는 유일한 유형은 타일 엑스.
-m32
-m64
32비트 또는 64비트 환경용 코드를 생성합니다. 32비트 환경은 int,
long, 32비트에 대한 포인터. 64비트 환경은 int를 32비트로 설정하고 long 및
64비트에 대한 포인터.
-mbig-엔디안
-미리틀 엔디안
각각 빅/리틀 엔디안 모드에서 코드를 생성합니다.
타일프로 옵션
Bowman의 -m 옵션은 TILEPro에서 지원됩니다.
-mcpu =name
대상으로 할 CPU 유형을 선택합니다. 현재 지원되는 유일한 유형은 타일프로.
-m32
int, long 및 포인터를 32비트로 설정하는 32비트 환경용 코드를 생성합니다.
이것은 유일하게 지원되는 동작이므로 플래그는 기본적으로 무시됩니다.
V850 옵션
Bowman의 -m 옵션은 V850 구현에 대해 정의됩니다.
-mlong-통화
-mno-long-통화
모든 통화를 멀리(가까운) 것으로 처리합니다. 통화가 멀리 있다고 가정하면
컴파일러는 항상 함수의 주소를 레지스터에 로드하고 간접적으로 호출합니다.
포인터를 통해.
-mno-ep
-mep
동일한 인덱스 포인터 4 이상을 사용하는 기본 블록을 최적화(최적화)하지 마십시오.
포인터를 "ep" 레지스터에 복사하고 더 짧은 "sld" 및 "sst"를 사용합니다.
지침. NS -mep 옵션은 최적화하는 경우 기본적으로 켜져 있습니다.
-mno-prolog-함수
-mprolog-함수
프롤로그에서 레지스터를 저장하고 복원하기 위해 외부 기능을 사용하지 마십시오.
그리고 기능의 에필로그. 외부 기능은 느리지만 더 적은 코드를 사용합니다.
둘 이상의 함수가 동일한 수의 레지스터를 저장하는 경우 공간. NS
-mprolog-함수 옵션은 최적화하는 경우 기본적으로 켜져 있습니다.
-mspace
코드를 가능한 한 작게 만드십시오. 현재, 이것은 단지 켜집니다 -mep
and -mprolog-함수 옵션을 제공합니다.
-mtda =n
크기가 다음과 같은 정적 또는 전역 변수를 넣습니다. n 작은 데이터 영역에 바이트 이하
"ep"가 가리키는 레지스터. 작은 데이터 영역은 총 256바이트까지 저장할 수 있습니다.
(바이트 참조의 경우 128바이트).
-msda=n
크기가 다음과 같은 정적 또는 전역 변수를 넣습니다. n 작은 데이터 영역에 바이트 이하
"gp"가 가리키는 레지스터. 작은 데이터 영역은 최대 64킬로바이트를 저장할 수 있습니다.
-mzda=n
크기가 다음과 같은 정적 또는 전역 변수를 넣습니다. n 처음 32바이트 이하
킬로바이트의 메모리.
-mv850
대상 프로세서가 V850임을 지정하십시오.
-mv850e3v5
대상 프로세서가 V850E3V5임을 지정하십시오. 전처리기 상수
이 옵션을 사용하면 "__v850e3v5__"가 정의됩니다.
-mv850e2v4
대상 프로세서가 V850E3V5임을 지정하십시오. 에 대한 별칭입니다.
-mv850e3v5 옵션을 선택합니다.
-mv850e2v3
대상 프로세서가 V850E2V3임을 지정하십시오. 전처리기 상수
이 옵션을 사용하면 "__v850e2v3__"가 정의됩니다.
-mv850e2
대상 프로세서가 V850E2임을 지정하십시오. 전처리기 상수
이 옵션을 사용하면 "__v850e2__"가 정의됩니다.
-mv850e1
대상 프로세서가 V850E1임을 지정하십시오. 전처리기 상수
이 옵션을 사용하면 "__v850e1__" 및 "__v850e__"가 정의됩니다.
-mv850es
대상 프로세서가 V850ES임을 지정하십시오. 에 대한 별칭입니다. -mv850e1
옵션을 선택합니다.
-mv850e
대상 프로세서가 V850E임을 지정하십시오. 전처리기 상수 "__v850e__"
이 옵션이 사용되는 경우 정의됩니다.
둘 다 -mv850 ...도 아니다 -mv850e ...도 아니다 -mv850e1 ...도 아니다 -mv850e2 ...도 아니다 -mv850e2v3 ...도 아니다 -mv850e3v5
정의된 다음 기본 대상 프로세서가 선택되고 관련 __v850*__
전처리기 상수가 정의됩니다.
전처리기 상수 "__v850" 및 "__v851__"은 다음에 관계없이 항상 정의됩니다.
어떤 프로세서 변형이 대상인지.
-mdisable-callt
-mno-비활성화-콜트
이 옵션은 v850e, v850e1,
v850 아키텍처의 v2e850, v2e3v850 및 v3e5v850 버전.
이 옵션은 RH850 ABI가 사용 중일 때 기본적으로 활성화됩니다(참조 -mrh850-아비), 그리고
GCC ABI가 사용 중일 때 기본적으로 비활성화됩니다. "CALLT" 명령이 실행 중인 경우
생성되면 C 전처리기 기호 "__V850_CALLT__"가 정의됩니다.
-mrelax
-mno-휴식
전달(또는 전달하지 않음) -mrelax 어셈블러에 대한 명령줄 옵션.
-mlong-점프
-mno-롱 점프
PC 관련 점프 명령 생성을 비활성화(또는 다시 활성화)합니다.
-msoft-float
-mhard-float
하드웨어 부동 소수점 명령어 생성을 비활성화(또는 다시 활성화)합니다. 이것
옵션은 대상 아키텍처가 다음과 같을 때만 중요합니다. V850E2V3 또는 더 높게. 만약에
하드웨어 부동 소수점 명령어가 생성된 다음 C 전처리기
"__FPU_OK__" 기호가 정의되고, 그렇지 않으면 "__NO_FPU__" 기호가 정의됩니다.
-mloop
e3v5 LOOP 명령어의 사용을 활성화합니다. 이 지침의 사용은
e3v5 아키텍처가 아직 사용 중이기 때문에 eXNUMXvXNUMX 아키텍처가 선택되면 기본적으로 활성화됩니다.
실험적.
-mrh850-아비
-mghs
V850 ABI의 RH850 버전에 대한 지원을 활성화합니다. 이것이 기본값입니다. 와 함께
이 버전의 ABI는 다음 규칙이 적용됩니다.
* 정수 크기의 구조체와 공용체는 메모리 포인터가 아닌 메모리 포인터를 통해 반환됩니다.
레지스터.
* 큰 구조 및 공용체(크기가 8바이트 이상)는 값으로 전달됩니다.
* 함수는 16비트 경계에 맞춰 정렬됩니다.
* -m8byte-정렬 명령줄 옵션이 지원됩니다.
* -mdisable-callt 명령줄 옵션은 기본적으로 활성화되어 있습니다. NS
-mno-비활성화-콜트 명령줄 옵션은 지원되지 않습니다.
이 버전의 ABI가 활성화된 경우 C 전처리기 기호 "__V850_RH850_ABI__"
정의됩니다.
-mgcc-아비
V850 ABI의 이전 GCC 버전에 대한 지원을 활성화합니다. 이 버전의 ABI를 사용하면
다음 규칙이 적용됩니다.
* 정수 크기의 구조체와 공용체는 레지스터 "r10"에 반환됩니다.
* 큰 구조 및 공용체(크기가 8바이트 이상)는 참조로 전달됩니다.
* 함수는 크기를 최적화하지 않는 한 32비트 경계에 맞춰 정렬됩니다.
* -m8byte-정렬 명령줄 옵션은 지원되지 않습니다.
* -mdisable-callt 명령줄 옵션이 지원되지만 기본적으로 활성화되어 있지 않습니다.
이 버전의 ABI가 활성화된 경우 C 전처리기 기호 "__V850_GCC_ABI__"
정의됩니다.
-m8byte-정렬
-mno-8byte-정렬
"double" 및 "long long" 유형에 대한 지원을 8바이트 경계에서 정렬할 수 있습니다.
기본값은 모든 개체의 정렬을 최대 4바이트로 제한하는 것입니다. 언제
-m8byte-정렬 실제로 C 전처리기 기호 "__V850_8BYTE_ALIGN__"은
한정된.
-mbig 스위치
큰 스위치 테이블에 적합한 코드를 생성합니다. 다음과 같은 경우에만 이 옵션을 사용하십시오.
어셈블러/링커가 스위치 테이블 내의 범위를 벗어난 분기에 대해 불평합니다.
-map-regs
이 옵션을 사용하면 컴파일러에서 생성한 코드에서 r2 및 r5가 사용됩니다. 이것
설정이 기본값입니다.
-mno-app-regs
이 옵션을 사용하면 r2 및 r5가 고정 레지스터로 처리됩니다.
백스 옵션
Bowman의 -m 옵션은 VAX에 대해 정의됩니다.
-뮤닉스
Unix 어셈블러가 실행하는 특정 점프 명령("aobleq" 등)을 출력하지 마십시오.
VAX는 장거리를 처리할 수 없습니다.
-mgnu
GNU 어셈블러가 실행된다는 가정 하에 점프 명령을 출력하십시오.
익숙한.
-mg D 형식 대신 G 형식 부동 소수점 숫자에 대한 출력 코드입니다.
비전 옵션
-m디버그
파일 I/O를 수행하고 MCM 대상에서 실행될 프로그램은 다음과 같아야 합니다.
이 옵션과 연결됩니다. 이는 라이브러리 libc.a 및 libdebug.a가 링크되도록 합니다.
프로그램은 GDB 원격 디버깅의 제어 하에 대상에서 실행되어야 합니다.
그루터기.
-msim
파일 I/O를 수행하고 시뮬레이터에서 실행될 프로그램은 다음과 같아야 합니다.
옵션으로 연결됩니다. 이로 인해 라이브러리 libc.a 및 libsim.a가 링크됩니다.
-mfpu
-mhard-float
부동 소수점 명령어가 포함된 코드를 생성합니다. 이것이 기본값입니다.
-mno-fpu
-msoft-float
부동 소수점에 대한 라이브러리 호출을 포함하는 코드를 생성합니다.
-msoft-float 출력 파일의 호출 규칙을 변경합니다. 그러므로 그것은 단지
컴파일하면 유용합니다. 모든 이 옵션이 있는 프로그램의 특히, 당신은
편집하다 libgcc.a, GCC와 함께 제공되는 라이브러리, -msoft-float 이를 위해
작동합니다.
-mcpu =CPU_유형
명령어 세트, 레지스터 세트 및 명령어 스케줄링 매개변수 설정
기계 유형 CPU_유형. 지원되는 값 CPU_유형 are mcm, gr5 and gr6.
mcm 의 동의어입니다 gr5 이전 버전과의 호환성을 위해 존재합니다.
기본적으로(달리 구성하지 않는 한) GCC는 다음의 GR5 변형에 대한 코드를 생성합니다.
비지움 아키텍처.
와 -mcpu=gr6, GCC는 Visium 아키텍처의 GR6 변형에 대한 코드를 생성합니다.
GR5 코드와의 유일한 차이점은 컴파일러가 블록 이동을 생성한다는 것입니다.
도움말을 참조하십시오.
-mtune=CPU_유형
머신 유형에 대한 명령어 스케줄링 매개변수 설정 CPU_유형, 그러나 설정하지 마십시오
옵션을 나타내는 명령어 세트 또는 레지스터 세트 -mcpu =CPU_유형 할 것이다.
-msv 모드
접근 제한이 없는 수퍼바이저 모드용 코드 생성
일반 레지스터에. 이것이 기본값입니다.
-muser 모드
일부 일반 레지스터에 대한 액세스가 있는 사용자 모드용 코드 생성
금지됨: GR5에서 레지스터 r24 ~ r31은 이 모드에서 액세스할 수 없습니다. 에
GR6, 레지스터 r29 ~ r31만 영향을 받습니다.
VMS 옵션
Bowman의 -m 옵션은 VMS 구현에 대해 정의됩니다.
-mvms-반환 코드
"main"에서 VMS 조건 코드를 반환합니다. 기본값은 POSIX 스타일 조건을 반환하는 것입니다.
(예: 오류) 코드.
-mdebug-메인=접두사
이름이 로 시작하는 첫 번째 루틴에 플래그 지정 접두사 의 주요 루틴으로
디버거.
-mmalloc64
기본값은 64비트 메모리 할당 루틴입니다.
-mpointer-크기=크기
포인터의 기본 크기를 설정합니다. 가능한 옵션 크기 are 32 or 짧은 32비트용
포인터, 64 or 긴 64비트 포인터의 경우 아니 32비트 포인터만 지원합니다.
나중 옵션은 "pragma pointer_size"를 비활성화합니다.
VxWorks 옵션
이 섹션의 옵션은 모든 VxWorks 대상에 대해 정의됩니다. 특정 옵션
대상 하드웨어는 해당 대상에 대한 다른 옵션과 함께 나열됩니다.
-mrtp
GCC는 VxWorks 커널과 실시간 프로세스(RTP) 모두에 대한 코드를 생성할 수 있습니다. 이것
옵션은 전자에서 후자로 전환됩니다. 또한 전처리기 매크로를 정의합니다.
"__RTP__".
-비정적
정적 라이브러리가 아닌 공유 라이브러리에 대해 RTP 실행 파일을 링크합니다. NS
옵션 -공전 and -공유 RTP에도 사용할 수 있습니다. -공전 기본값입니다.
-비정적
-비다이나믹
이러한 옵션은 링커로 전달됩니다. 다음과의 호환성을 위해 정의됩니다.
디아브.
-Xbind-게으른
함수 호출의 지연 바인딩을 활성화합니다. 이 옵션은 다음과 같습니다. -Wl,-z,지금 이고
Diab와의 호환성을 위해 정의되었습니다.
-X바인드-지금
함수 호출의 지연 바인딩을 비활성화합니다. 이 옵션은 기본값이며 다음에 대해 정의됩니다.
디아브와의 호환성
x86 옵션
Bowman의 -m 옵션은 x86 컴퓨터 제품군에 대해 정의됩니다.
-행진=CPU 유형
머신 유형에 대한 지침 생성 CPU 유형. 대조적으로 -mtune=CPU 유형,
생성된 코드를 지정된 CPU 유형, -행진=CPU 유형
GCC가 다른 프로세서에서 전혀 실행되지 않을 수 있는 코드를 생성할 수 있도록 합니다.
가리키는. 지정 -행진=CPU 유형 의미하다 -mtune=CPU 유형.
에 대한 선택 CPU 유형 위치 :
출신
이것은 다음을 결정하여 컴파일 시간에 코드를 생성할 CPU를 선택합니다.
컴파일 머신의 프로세서 유형. 사용 -march = 네이티브 모두 활성화
로컬 머신에서 지원하는 명령어 하위 집합(따라서 결과가 실행되지 않을 수 있음)
다른 기계에서). 사용 -mtune=네이티브 로컬에 최적화된 코드 생성
선택된 명령어 세트의 제약 하에서 기계.
i386
오리지널 인텔 i386 CPU.
i486
인텔 i486 CPU. (이 칩에는 스케줄링이 구현되어 있지 않습니다.)
i586
펜티엄
MMX를 지원하지 않는 Intel Pentium CPU.
펜티엄-mmx
Intel Pentium MMX CPU, MMX 명령어 세트 지원이 있는 Pentium 코어 기반.
펜티엄프로
인텔 펜티엄 프로 CPU.
i686
함께 사용할 때 -XNUMX 월, Pentium Pro 명령어 세트가 사용되므로 코드가 실행됩니다.
모든 i686 제품군 칩에서. 와 함께 사용할 때 -mtune, 와 같은 의미입니다.
일반적인.
펜티엄
Intel Pentium II CPU, MMX 명령어 세트 지원이 있는 Pentium Pro 코어 기반.
펜티엄
펜티엄3m
Intel Pentium III CPU, MMX 및 SSE 명령어 세트가 있는 Pentium Pro 코어 기반
지원합니다.
펜티엄-m
인텔 펜티엄 M; MMX, SSE 및 SSE2가 포함된 Intel Pentium III CPU의 저전력 버전
명령어 세트 지원. Centrino 노트북에서 사용합니다.
펜티엄
펜티엄4m
MMX, SSE 및 SSE4 명령어 세트를 지원하는 Intel Pentium 2 CPU.
프레스콧
MMX, SSE, SSE4 및 SSE2 명령어가 포함된 Intel Pentium 3 CPU의 향상된 버전
지원을 설정합니다.
노코나
4비트 확장, MMX, SSE, SSE64 및
SSE3 명령어 세트 지원.
core2
2비트 확장이 있는 Intel Core 64 CPU, MMX, SSE, SSE2, SSE3 및 SSSE3
명령어 세트 지원.
네할렘
64비트 확장 기능이 있는 Intel Nehalem CPU, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2 및 POPCNT 명령어 세트 지원.
웨스트미어
64비트 확장이 있는 Intel Westmere CPU, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, POPCNT, AES 및 PCLMUL 명령어 세트 지원.
모래다리
64비트 확장 기능이 있는 Intel Sandy Bridge CPU, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AVX, AES 및 PCLMUL 명령어 세트 지원.
아이비브릿지
64비트 확장이 있는 Intel Ivy Bridge CPU, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, POPCNT, AVX, AES, PCLMUL, FSGSBASE, RDRND 및 F16C 명령어 세트
지원합니다.
하 스웰
64비트 확장이 있는 Intel Haswell CPU, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2
및 F16C 명령어 세트 지원.
브로드웰
64비트 확장 기능이 있는 Intel Broadwell CPU, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2,
F16C, RDSEED, ADCX 및 PREFETCHW 명령어 세트 지원.
본넬
64비트 확장이 있는 Intel Bonnell CPU, MOVBE, MMX, SSE, SSE2, SSE3 및 SSSE3
명령어 세트 지원.
실버몬트
64비트 확장이 있는 Intel Silvermont CPU, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AES, PCLMUL 및 RDRND 명령어 세트 지원.
놀 64비트 확장 기능이 있는 Intel Knight's Landing CPU, MOVBE, MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI,
BMI2, F16C, RDSEED, ADCX, PREFETCHW, AVX512F, AVX512PF, AVX512ER 및 AVX512CD
명령어 세트 지원.
k6 MMX 명령어 세트를 지원하는 AMD K6 CPU.
k6-2
k6-3
MMX 및 6DNow!가 포함된 AMD K3 CPU의 향상된 버전! 명령어 세트 지원.
애슐론
애슬론 트버드
MMX가 탑재된 AMD Athlon CPU, 3dNOW!, 향상된 3DNow! 및 SSE 프리페치 명령어
지원합니다.
애슬론-4
애슬론-xp
애슬론-mp
MMX, 3DNow!, 향상된 3DNow!가 포함된 향상된 AMD Athlon CPU 및 전체 SSE 명령
지원을 설정합니다.
k8
옵테론
애슬론64
애슬론-FX
다음을 포함하여 x8-86 명령어 세트를 지원하는 AMD K64 코어 기반 프로세서
AMD Opteron, Athlon 64 및 Athlon 64 FX 프로세서. (이것은 MMX를 대체합니다.
SSE, SSE2, 3DNow!, 향상된 3DNow! 및 64비트 명령어 세트 확장.)
k8-sse3
옵테론-sse3
애슬론64-sse3
SSE8 명령어 세트를 지원하는 향상된 버전의 AMD K3 코어.
암드팜10
바르셀로나
x10-86 명령어 세트를 지원하는 AMD 제품군 64h 코어 기반 CPU. (이것
MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!, 향상된 3DNow!, ABM 및 64비트 슈퍼세트
명령어 세트 확장)
bdver1
x15-86 명령어 세트를 지원하는 AMD 제품군 64h 코어 기반 CPU. (이것
상위 집합 FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A,
SSSE3, SSE4.1, SSE4.2, ABM 및 64비트 명령어 세트 확장)
bdver2
x15-86 명령어 세트를 지원하는 AMD 제품군 64h 코어 기반 CPU. (이것
슈퍼세트 BMI, TBM, F16C, FMA, FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE,
SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM 및 64비트 명령어 세트
확장자.)
bdver3
x15-86 명령어 세트를 지원하는 AMD 제품군 64h 코어 기반 CPU. (이것
슈퍼세트 BMI, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, XOP, LWP, AES, PCL_MUL, CX16,
MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM 및 64비트 명령어 세트
확장.
bdver4
x15-86 명령어 세트를 지원하는 AMD 제품군 64h 코어 기반 CPU. (이것
슈퍼세트 BMI, BMI2, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, AVX2, XOP, LWP, AES,
PCL_MUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM 및
64비트 명령어 세트 확장.
btver1
x14-86 명령어 세트를 지원하는 AMD 제품군 64h 코어 기반 CPU. (이것
상위 집합 MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, CX16, ABM 및 64비트 명령어 세트
확장자.)
btver2
x16-86 명령어 세트를 지원하는 AMD 제품군 64h 코어 기반 CPU. 이것
MOVBE, F16C, BMI, AVX, PCL_MUL, AES, SSE4.2, SSE4.1, CX16, ABM, SSE4A,
SSSE3, SSE3, SSE2, SSE, MMX 및 64비트 명령어 세트 확장.
윈칩-c6
IDT WinChip C6 CPU, 추가 MMX 명령어 세트로 i486과 동일한 방식으로 처리
지원합니다.
윈칩2
IDT WinChip 2 CPU, 추가 MMX 및 486DNow!
명령어 세트 지원.
c3 MMX 및 3DNow가 있는 VIA C3 CPU! 명령어 세트 지원. (일정이 없습니다.
이 칩에 대해 구현되었습니다.)
c3 - 2
VIA C3-2(Nehemiah/C5XL) CPU와 MMX 및 SSE 명령어 세트 지원. (아니요
스케줄링은 이 칩에 대해 구현됩니다.)
지 오드
MMX 및 3DNow!가 탑재된 AMD Geode 임베디드 프로세서! 명령어 세트 지원.
-mtune=CPU 유형
튜닝 CPU 유형 ABI를 제외하고 생성된 코드에 적용 가능한 모든 것
사용 가능한 지침 세트. 특정 항목을 선택하면서 CPU 유형 일정
특정 칩에 적절하게 적용되는 경우 컴파일러는 코드를 생성하지 않습니다.
다음을 사용하지 않는 한 기본 머신 유형에서 실행할 수 없습니다. -행진=CPU 유형 옵션을 선택합니다.
예를 들어, GCC가 i686-pc-linux-gnu에 대해 구성된 경우 -mtune=펜티엄4 생성
Pentium 4에 맞게 조정되었지만 여전히 i686 시스템에서 실행되는 코드입니다.
에 대한 선택 CPU 유형 와 동일하다 -XNUMX 월. 게다가, -mtune 2를 지원
추가 선택 CPU 유형:
일반적인
가장 일반적인 IA32/AMD64/EM64T 프로세서에 최적화된 코드를 생성합니다. 만약 너라면
코드가 실행될 CPU를 알고 있으면 해당하는
-mtune or -XNUMX 월 옵션 대신 -mtune=일반. 하지만 혹시 모르니
애플리케이션의 CPU 사용자가 갖게 될 CPU가 정확히 무엇인지 확인하려면 이것을 사용해야 합니다.
옵션을 선택합니다.
새로운 프로세서가 시장에 배포됨에 따라 이 옵션의 동작은
바뀔 것이다. 따라서 최신 버전의 GCC로 업그레이드하면 코드 생성
이 옵션으로 제어되는 프로세서는 가장 많이 사용되는 프로세서를 반영하도록 변경됩니다.
해당 버전의 GCC가 릴리스될 때 일반적입니다.
없다. -march=일반 옵션 때문에 -XNUMX 월 명령어 세트를 나타냅니다.
컴파일러가 사용할 수 있으며 모든 항목에 적용할 수 있는 일반 명령 집합이 없습니다.
프로세서. 대조적으로, -mtune 프로세서를 나타냅니다(또는 이 경우
코드가 최적화된 프로세서 모음).
정보
Haswell인 최신 Intel 프로세서에 최적화된 코드를 생성합니다.
GCC의 이 버전에 대한 Silvermont입니다. 코드가 있는 CPU를 알고 있는 경우
실행되면 해당하는 -mtune or -XNUMX 월 옵션 대신
-mtune=인텔. 그러나 응용 프로그램이 두 Haswell 모두에서 더 나은 성능을 발휘하려면
Silvermont를 사용하는 경우 이 옵션을 사용해야 합니다.
새로운 Intel 프로세서가 시장에 배포됨에 따라 이 프로세서의 동작은
옵션이 변경됩니다. 따라서 최신 버전의 GCC로 업그레이드하면 코드
이 옵션으로 제어되는 세대는 최신 인텔을 반영하도록 변경됩니다.
해당 버전의 GCC가 출시된 시점의 프로세서입니다.
없다. -march=인텔 옵션 때문에 -XNUMX 월 명령어 세트를 나타냅니다.
컴파일러가 사용할 수 있으며 모든 항목에 적용할 수 있는 공통 명령어 세트가 없습니다.
프로세서. 대조적으로, -mtune 프로세서를 나타냅니다(또는 이 경우
코드가 최적화된 프로세서 모음).
-mcpu =CPU 유형
더 이상 사용되지 않는 동의어 -mtune.
-mfpmath=단위
선택한 단위에 대한 부동 소수점 산술 생성 단위. 에 대한 선택 단위 위치 :
387 대부분의 칩에 있는 표준 387 부동 소수점 보조 프로세서 사용
그렇지 않으면 에뮬레이트됩니다. 이 옵션으로 컴파일된 코드는 거의 모든 곳에서 실행됩니다.
임시 결과는 정밀도 대신 80비트 정밀도로 계산됩니다.
유형별로 지정되어 대부분의 경우와 약간 다른 결과가 나타납니다.
다른 칩. 보다 -fffloat-store 더 자세한 설명을 위해.
이것은 x86-32 대상에 대한 기본 선택입니다.
ESS SSE 명령어 세트에 있는 스칼라 부동 소수점 명령어를 사용합니다. 이것
명령 세트는 Pentium III 및 최신 칩과 AMD 라인에서 지원됩니다.
Athlon-4, Athlon XP 및 Athlon MP 칩에 의해. SSE의 이전 버전
명령어 세트는 단정밀도 산술만 지원하므로 이중 및
확장 정밀도 산술은 여전히 387을 사용하여 수행됩니다. 이후 버전, 현재
Pentium 4 및 AMD x86-64 칩에서만 배정밀도 산술도 지원합니다.
x86-32 컴파일러의 경우 다음을 사용해야 합니다. -행진=CPU 유형, -msse or -msse2. 로 전환
SSE 확장을 활성화하고 이 옵션을 유효하게 만드십시오. x86-64 컴파일러의 경우,
이러한 확장은 기본적으로 활성화되어 있습니다.
결과 코드는 대부분의 경우 상당히 빨라야 하며
387 코드의 수치적 불안정성 문제를 피하지만 일부 기존 코드를 깨뜨릴 수 있습니다.
임시가 80비트일 것으로 예상하는 코드입니다.
이것은 x86-64 컴파일러의 기본 선택입니다.
쎄,387
쎄+387
두
한 번에 두 명령어 세트를 모두 활용하십시오. 이것은 효과적으로 두 배
사용 가능한 레지스터의 양 및 387을 위한 별도의 실행 단위가 있는 칩
실행 자원도 SSE합니다. 이 옵션은 아직 사용 중이므로 주의해서 사용하십시오.
GCC 레지스터 할당자가 별도로 모델링하지 않기 때문에 실험적
기능 단위가 잘 작동하지 않아 성능이 불안정합니다.
-매즘=방언
선택 항목을 사용하여 조립 지침 출력 방언. 어떤 방언인지에도 영향을 미칩니다.
기본 "asm" 및 확장된 "asm"에 사용됩니다. 지원되는 선택 항목(방언순)은 다음과 같습니다. 에
or 정보. 기본값은 에. 다윈은 지원하지 않습니다 정보.
-mieee-fp
-mno-ieee-fp
컴파일러가 IEEE 부동 소수점 비교를 사용하는지 여부를 제어합니다. 이것들
비교 결과가 정렬되지 않은 경우를 올바르게 처리하십시오.
-msoft-float
부동 소수점에 대한 라이브러리 호출이 포함된 출력을 생성합니다.
경고: 필수 라이브러리는 GCC의 일부가 아닙니다. 일반적으로 시설의
머신의 일반적인 C 컴파일러가 사용되지만 이것은 크로스 크로스에서 직접 수행될 수 없습니다.
편집. 적절한 라이브러리를 제공하기 위해 스스로 준비해야 합니다.
크로스 컴파일을 위한 함수
함수가 80387 레지스터에서 부동 소수점 결과를 반환하는 시스템에서
스택, 경우에도 일부 부동 소수점 연산 코드가 방출될 수 있습니다. -msoft-float 사용.
-mno-fp-ret-in-387
함수의 반환 값에 FPU 레지스터를 사용하지 마십시오.
일반적인 호출 규칙에는 "float" 및 "double" 유형의 값을 반환하는 함수가 있습니다.
FPU가 없더라도 FPU 레지스터에 있습니다. 아이디어는 운영 체제
FPU를 에뮬레이트해야 합니다.
옵션 -mno-fp-ret-in-387 이러한 값이 일반 CPU에서 반환되도록 합니다.
대신 등록합니다.
-mno-팬시-수학-387
일부 387 에뮬레이터는 "sin", "cos" 및 "sqrt" 명령어를 지원하지 않습니다.
387. 이러한 명령을 생성하지 않으려면 이 옵션을 지정하십시오. 이 옵션은
OpenBSD 및 NetBSD의 기본값입니다. 이 옵션은 다음과 같은 경우 무시됩니다. -XNUMX 월 표시
대상 CPU에는 항상 FPU가 있으므로 명령어는 에뮬레이션이 필요하지 않습니다.
이 지침은 다음을 사용하지 않는 한 생성되지 않습니다.
-재미있는 수학 최적화 스위치.
-악성-더블
-mno-정렬-더블
GCC가 "double", "long double" 및 "long long" 변수를 정렬할지 여부를 제어합니다.
두 단어 경계 또는 한 단어 경계. 두 단어로 된 "이중" 변수 정렬
경계는 더 많은 비용을 들이고 Pentium에서 다소 빠르게 실행되는 코드를 생성합니다.
메모리.
x86-64에서, -악성-더블 기본적으로 활성화되어 있습니다.
경고: 당신이 -악성-더블 스위치, 위의 유형을 포함하는 구조
게시된 애플리케이션 바이너리 인터페이스 사양과 다르게 정렬됨
x86-32용이며 다음 없이 컴파일된 코드의 구조와 바이너리 호환되지 않습니다.
그 스위치.
-m96bit-롱-더블
-m128bit-롱-더블
이 스위치는 "롱 더블" 유형의 크기를 제어합니다. x86-32 애플리케이션 바이너리
인터페이스는 크기를 96비트로 지정하므로 -m96bit-롱-더블 의 기본값입니다.
32비트 모드.
현대 아키텍처(펜티엄 이상)는 8-에 맞춰 "긴 이중"을 선호합니다.
또는 16바이트 경계. ABI를 준수하는 배열이나 구조에서 이것은
가능한. 그래서 지정 -m128bit-롱-더블 "long double"을 16바이트로 정렬합니다.
추가 32비트 XNUMX으로 "long double"을 패딩하여 경계.
x86-64 컴파일러에서, -m128bit-롱-더블 ABI로 기본 선택 사항입니다.
"long double"이 16바이트 경계에 정렬되도록 지정합니다.
이러한 옵션 중 어느 것도 x87 표준보다 더 높은 정밀도를 가능하게 하지 않습니다.
"long double"의 경우 80비트입니다.
경고: 대상 ABI의 기본값을 재정의하면 크기가 변경됩니다.
"long double" 변수를 포함하는 구조 및 배열 및 수정
"long double"을 취하는 함수에 대한 함수 호출 규칙. 그러므로 그들은 아니다
해당 스위치 없이 컴파일된 코드와 바이너리 호환 가능합니다.
-mlong-더블-64
-mlong-더블-80
-mlong-더블-128
이 스위치는 "롱 더블" 유형의 크기를 제어합니다. 64비트의 크기는
"long double" 유형은 "double" 유형에 해당합니다. 이것은 32비트의 기본값입니다.
바이오닉 C 라이브러리. 128비트 크기는 "long double" 유형을 다음과 동일하게 만듭니다.
"__float128" 유형. 이것은 64비트 Bionic C 라이브러리의 기본값입니다.
경고: 대상 ABI의 기본값을 재정의하면 크기가 변경됩니다.
"long double" 변수를 포함하는 구조 및 배열 및 수정
"long double"을 취하는 함수에 대한 함수 호출 규칙. 그러므로 그들은 아니다
해당 스위치 없이 컴파일된 코드와 바이너리 호환 가능합니다.
-악성 데이터=유형
GCC가 변수를 정렬하는 방법을 제어합니다. 지원되는 값 유형 are 동료 사용 증가
정렬 값 호환은 GCC 4.8 및 이전 버전을 사용합니다. ABI 정렬 값을 다음과 같이 사용합니다.
psABI에 의해 지정되고, 캐시라인 일치하기 위해 증가된 정렬 값을 사용합니다.
캐시 라인 크기. 동료 기본값입니다.
-mlarge-데이터-임계값=임계값
인셀덤 공식 판매점인 -mcmodel=중간 지정된 경우 보다 큰 데이터 개체 임계값 배치된다
큰 데이터 섹션. 이 값은 에 연결된 모든 개체에서 동일해야 합니다.
바이너리이며 기본값은 65535입니다.
-mrtd
고정된 함수를 사용하는 다른 함수 호출 규칙을 사용합니다.
"ret"와 함께 반환되는 인수의 수 숫자" 그들의 인수를 팝하는 명령
돌아오는 동안. 이것은 필요가 없기 때문에 호출자에게 하나의 명령을 저장합니다.
거기에 인수를 팝니다.
다음을 사용하여 이 호출 시퀀스로 개별 함수가 호출되도록 지정할 수 있습니다.
기능 속성 "stdcall". 재정의할 수도 있습니다. -mrtd 옵션을 사용하여
기능 속성 "cdecl".
경고: 이 호출 규칙은 Unix에서 일반적으로 사용되는 것과 호환되지 않습니다.
따라서 Unix 컴파일러로 컴파일된 라이브러리를 호출해야 하는 경우 사용할 수 없습니다.
또한 변수를 사용하는 모든 함수에 대해 함수 프로토타입을 제공해야 합니다.
인수의 수("printf" 포함); 그렇지 않으면 잘못된 코드가 생성됩니다.
해당 함수를 호출합니다.
또한 너무 많은 함수를 호출하면 심각하게 잘못된 코드가 발생합니다.
인수. (일반적으로 추가 인수는 무해하게 무시됩니다.)
-mregparm=NUM
정수 인수를 전달하는 데 사용되는 레지스터 수를 제어합니다. 기본적으로
레지스터는 인수를 전달하는 데 사용되며 최대 3개의 레지스터를 사용할 수 있습니다. 당신은 할 수 있습니다
function 속성을 사용하여 특정 기능에 대한 이 동작을 제어합니다.
"레그팜".
경고: 이 스위치를 사용하면 NUM XNUMX이 아니면 모든 모듈을 빌드해야 합니다.
모든 라이브러리를 포함하여 동일한 값을 사용합니다. 여기에는 시스템 라이브러리 및
시작 모듈.
-msseregparm
float 및 double 인수 및 반환 값에 대해 SSE 레지스터 전달 규칙을 사용합니다.
function 속성을 사용하여 특정 함수에 대한 이 동작을 제어할 수 있습니다.
"세레그팜".
경고: 이 스위치를 사용하는 경우 모든 모듈을 동일한 값으로 빌드해야 합니다.
모든 라이브러리를 포함합니다. 여기에는 시스템 라이브러리와 시작 모듈이 포함됩니다.
-mvect8-ret-in-mem
MMX 레지스터 대신 메모리에 8바이트 벡터를 반환합니다. 이것은 기본 설정입니다.
Solaris@tie{}8, 9 및 VxWorks가 Sun Studio 컴파일러의 ABI와 일치할 때까지
버전 12. 이후 컴파일러 버전(Studio 12 Update@tie{}1부터 시작)은 다음을 따릅니다.
Solaris@tie{}86 이상에서 기본값인 다른 x10 대상에서 사용하는 ABI.
만 에서 생성한 기존 코드와 호환성을 유지해야 하는 경우 이 옵션을 사용하십시오.
이전 컴파일러 버전 또는 이전 버전의 GCC.
-mpc32
-mpc64
-mpc80
80387 부동 소수점 정밀도를 32, 64 또는 80비트로 설정합니다. 언제 -mpc32 지정되고,
부동 소수점 연산 결과의 유효 숫자는 24비트로 반올림됩니다.
(단정밀도); -mpc64 부동 소수점 결과의 유효숫자를 반올림합니다.
53비트로 연산(배정밀도) 및 -mpc80 결과의 유효숫자를 반올림합니다.
부동 소수점 연산을 64비트(확장 배정밀도)로 변환합니다.
기본. 이 옵션을 사용하면 더 높은 정밀도의 부동 소수점 연산이
FPU 제어 단어를 명시적으로 설정하지 않으면 프로그래머가 사용할 수 없습니다.
부동 소수점 연산의 반올림을 기본 80비트 미만으로 설정하면
일부 프로그램의 속도를 2% 이상 높입니다. 일부 수학 라이브러리는 다음과 같이 가정합니다.
확장 정밀도(80비트) 부동 소수점 연산은 기본적으로 활성화되어 있습니다. 루틴
이러한 라이브러리에서는 일반적으로 다음을 통해 정확도가 크게 손실될 수 있습니다.
이 옵션을 사용하여 정밀도를
확장 정밀도보다 작습니다.
-mstack재정렬
입력 시 스택을 다시 정렬합니다. x86에서는 -mstack재정렬 옵션 생성
필요한 경우 런타임 스택을 재정렬하는 대체 프롤로그 및 에필로그. 이것
최신 코드와 4바이트 스택 정렬을 유지하는 레거시 코드 혼합 지원
SSE 호환성을 위해 16바이트 스택 정렬을 유지합니다. 속성 참조
"force_align_arg_pointer", 개별 기능에 적용 가능.
-mpreferred-스택-경계=NUM
스택 경계를 2로 올린 상태로 유지하려고 시도합니다. NUM 바이트 경계. 만약에
-우선순위-스택-경계 지정되지 않은 경우 기본값은 4(16바이트 또는 128비트)입니다.
경고: SSE 확장을 사용하여 x86-64 아키텍처용 코드를 생성할 때
장애인, -mpreferred-스택-경계=3 스택 경계를 정렬된 상태로 유지하는 데 사용할 수 있습니다.
8바이트 경계까지. x86-64 ABI는 16바이트 스택 정렬이 필요하므로 이것이 ABI입니다.
호환되지 않으며 스택 공간이 제한된 제어된 환경에서 사용하도록 되어 있습니다.
중요한 제한. 이 옵션은 함수가 16으로 컴파일될 때 잘못된 코드로 이어집니다.
바이트 스택 정렬(예: 표준 라이브러리의 함수)은 다음과 같이 호출됩니다.
정렬되지 않은 스택. 이 경우 SSE 명령으로 인해 메모리 액세스가 잘못 정렬될 수 있습니다.
트랩. 또한 가변 인수는 16바이트 정렬에 대해 잘못 처리됩니다.
개체(x87 long double 및 __int128 포함)는 잘못된 결과를 초래합니다. 당신은해야합니다
모든 모듈을 다음으로 빌드 -mpreferred-스택-경계=3, 모든 라이브러리를 포함합니다. 이것
시스템 라이브러리 및 시작 모듈이 포함됩니다.
-최소화 스택 경계=NUM
들어오는 스택이 2로 정렬되어 있다고 가정합니다. NUM 바이트 경계. 만약에
-최소 스택 경계 가 지정되지 않은 경우
-우선순위-스택-경계 사용.
Pentium 및 Pentium Pro에서 "double" 및 "long double" 값은
8바이트 경계(참조 -악성-더블) 또는 상당한 런타임 성능 저하
처벌. Pentium III에서 SSE(Streaming SIMD Extension) 데이터 유형 "__m128"은
16바이트로 정렬되지 않으면 제대로 작동하지 않습니다.
스택에서 이 값의 적절한 정렬을 보장하려면 스택 경계가 다음과 같아야 합니다.
스택에 저장된 값에 필요한 대로 정렬됩니다. 또한 모든 기능
스택을 정렬된 상태로 유지하도록 생성되어야 합니다. 따라서 함수를 호출
더 낮은 값으로 컴파일된 함수에서 더 높은 선호 스택 경계로 컴파일
기본 스택 경계는 스택을 잘못 정렬할 가능성이 높습니다. 다음을 수행하는 것이 좋습니다.
콜백을 사용하는 라이브러리는 항상 기본 설정을 사용합니다.
이 추가 정렬은 추가 스택 공간을 소비하고 일반적으로 코드를 증가시킵니다.
크기. 임베디드 시스템과 같은 스택 공간 사용에 민감한 코드
운영 체제 커널에서 선호하는 정렬을
-mpreferred-스택-경계=2.
-mmmx.
-msse
-msse2.
-msse3.
-mssse3
-msse4.
-msse4a
-msse4.1.
-msse4.2.
-mavx
-mavx2
-mavx512f
-mavx512pf
-mavx512er
-mavx512cd
-msha
-메스
-mpclmul
-mclfushopt
-mfsgsbase
-mrdrnd
-mf16c.
-mfma
-mfma4
-mno-fma4
-mprefetchwt1
-mxop
-mlwp
-m3dnow
-mpopcnt
-맘마
-mbmi
-mbmi2
-mlzcnt
-mfxsr
-mx저장
-mxsaveopt
-mxsavec
-mxsave
-mrtm
-mtbm
-mmpx
-mmwaitx
이 스위치는 MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, AVX, AVX2, AVX512F, AVX512PF, AVX512ER, AVX512CD, SHA, AES, PCLMUL, FSGSBASE,
RDRND, F16C, FMA, SSE4A, FMA4, XOP, LWP, ABM, BMI, BMI2, FXSR, XSAVE, XSAVEOPT, LZCNT,
RTM, MPX, MWAITX 또는 3DNow! 확장된 명령어 세트. 각각 해당하는 -아뇨-
이 지침의 사용을 비활성화하는 옵션입니다.
이러한 확장은 내장 함수로도 사용할 수 있습니다. x86 내장 기능,
이 스위치에 의해 활성화 및 비활성화되는 기능에 대한 자세한 내용은
부동 소수점 코드에서 자동으로 SSE/SSE2 명령어를 생성하려면(반대로
387 지침까지), 참조 -mfpmath=sse.
GCC는 다음과 같은 경우 SSEx 명령어를 사용하지 않습니다. -mavx 사용. 대신 새로운 AVX를 생성합니다.
필요한 경우 모든 SSEx 명령어에 대한 명령어 또는 AVX 등가물.
이러한 옵션을 사용하면 GCC가 생성된 코드에서 이러한 확장 명령어를 사용할 수 있습니다.
없이 -mfpmath=sse. 런타임 CPU 감지를 수행하는 응용 프로그램은 컴파일해야 합니다.
적절한 플래그를 사용하여 지원되는 각 아키텍처에 대해 별도의 파일을 생성합니다. 에
특히 CPU 감지 코드가 포함된 파일은
이러한 옵션.
-mdump-조정 기능
이 옵션은 GCC가 x86 성능 조정 기능의 이름을 덤프하도록 지시하고
기본 설정. 이름은 다음에서 사용할 수 있습니다. -mtune-ctrl=기능 목록.
-mtune-ctrl=기능 목록
이 옵션은 x86 코드 생성 기능을 세밀하게 제어하는 데 사용됩니다.
기능 목록 는 쉼표로 구분된 목록입니다. 기능 이름. 또한보십시오
-mdump-조정 기능. 지정되면 기능 선행하지 않으면 켜집니다.
과 ^, 그렇지 않으면 꺼집니다. -mtune-ctrl=기능 목록 사용하기 위한 것이다
GCC 개발자에 의해. 그것을 사용하면 테스트에서 다루지 않는 코드 경로로 이어질 수 있으며
잠재적으로 컴파일러 ICE 또는 런타임 오류가 발생할 수 있습니다.
-mno-기본값
이 옵션은 조정 가능한 모든 기능을 끄도록 GCC에 지시합니다. 또한보십시오
-mtune-ctrl=기능 목록 and -mdump-조정 기능.
-mcld
이 옵션은 함수의 프롤로그에서 "cld" 명령을 내보내도록 GCC에 지시합니다.
문자열 명령을 사용합니다. 문자열 명령어는 선택할 DF 플래그에 따라 다릅니다.
자동 증가 또는 자동 감소 모드 사이. ABI가 DF 플래그를 지정하는 동안
기능 입력 시 지워지므로 일부 운영 체제는 이 사양을 위반하지 않습니다.
예외 디스패처에서 DF 플래그를 지웁니다. 예외 처리기는
DF 플래그가 설정된 상태에서 호출되어 문자열이
지침이 사용됩니다. 이 옵션은 32비트 x86 대상에서 기본적으로 활성화할 수 있습니다.
다음을 사용하여 GCC 구성 --활성화-cld 옵션을 구성합니다. "cld"의 생성
명령은 다음으로 억제할 수 있습니다. -mno-cld 이 경우 컴파일러 옵션.
-mvzeroupper
이 옵션은 "vzeroupper" 명령을 전송하기 전에 GCC에 지시합니다.
AVX에서 SSE로의 전환 패널티도 최소화하기 위해 기능 외부로의 제어 흐름
불필요한 "zeroupper" 내장 함수를 제거합니다.
-mprefer-avx128
이 옵션은 GCC가 128비트 AVX 대신 256비트 AVX 명령어를 사용하도록 지시합니다.
자동 벡터라이저의 지침.
-mcx16
이 옵션을 사용하면 GCC가 "CMPXCHG16B" 명령어를 생성할 수 있습니다. "CMPXCHG16B"는
128비트 이중 쿼드워드(또는 oword) 데이터 유형에 대한 원자적 연산에 사용됩니다. 이것은
여러 프로세서에서 업데이트할 수 있는 고해상도 카운터(또는
코어). 이 명령어는 원자 내장 함수의 일부로 생성됩니다.
__동조 빌트인 or __원자 빌트인 를 참조하세요
-msahf
이 옵션을 사용하면 64비트 코드에서 "SAHF" 명령어를 생성할 수 있습니다. 초기 인텔
Intel 4를 지원하는 Pentium 64 CPU, Pentium 4 G1 단계 도입 이전
2005년 XNUMX월, 에서 지원하는 "LAHF" 및 "SAHF" 지침이 부족했습니다.
AMD64. 이들은 각각 특정 상태 플래그에 대한 로드 및 저장 명령입니다.
64비트 모드에서 "SAHF" 명령어는 "fmod", "drem" 및
"나머지" 내장 함수; 보다 기타 빌트인 를 참조하세요
-mmovbe
이 옵션을 사용하면 "movbe" 명령어를 사용하여 "__builtin_bswap32"를 구현할 수 있습니다.
및 "__builtin_bswap64".
-mcrc32
이 옵션은 내장 함수 "__builtin_ia32_crc32qi"를 활성화합니다.
"__builtin_ia32_crc32hi", "__builtin_ia32_crc32si" 및 "__builtin_ia32_crc32di"
"crc32" 기계 명령어를 생성합니다.
-mrecip
이 옵션을 사용하면 "RCPSS" 및 "RSQRTSS" 명령어(및 벡터화된
"RCPPS" 및 "RSQRTPS" 변형) 추가 Newton-Raphson 단계로 증가
단일에 대한 "DIVSS" 및 "SQRTSS"(및 벡터화된 변형) 대신 정밀도
정밀 부동 소수점 인수. 이 지침은 다음과 같은 경우에만 생성됩니다.
-재미있는 수학 최적화 와 함께 활성화됩니다. - 유한 수학 전용 and
-fno 트래핑 수학. 시퀀스의 처리량은
non-reciprocal 명령어의 처리량, 시퀀스의 정밀도는
최대 2ulp까지 감소합니다(즉, 1.0의 역수는 0.99999994와 같습니다).
GCC는 "1.0f/sqrtf(NS)" "RSQRTSS"(또는 "RSQRTPS") 측면에서 이미
과 -빠른 수학 (또는 위의 옵션 조합), 필요하지 않음 -mrecip.
또한 GCC는 추가 Newton-Raphson 단계와 함께 위의 시퀀스를 방출합니다.
벡터화된 단일 부동 소수점 나누기 및 벡터화된 "sqrtf(NS)" 이미 -빠른 수학
(또는 위의 옵션 조합), 필요하지 않음 -mrecip.
-mrecip=고르다
이 옵션은 사용할 수 있는 상호 추정 지침을 제어합니다. 고르다 하는
앞에 올 수 있는 쉼표로 구분된 옵션 목록 ! 옵션을 반전시키려면:
모든 모든 견적 지침을 활성화합니다.
디폴트 값
에 해당하는 기본 지침을 활성화합니다. -mrecip.
없음
에 해당하는 모든 추정 지침을 비활성화합니다. -mno-recipe.
DIV 스칼라 나눗셈에 대한 근사를 활성화합니다.
vec-div
벡터화된 나눗셈에 대한 근사를 활성화합니다.
sqrt
스칼라 제곱근에 대한 근사를 활성화합니다.
vec-sqrt
벡터화된 제곱근에 대한 근사를 활성화합니다.
예를 들어 -mrecip=모두,!sqrt 모든 역 근사를 가능하게 합니다.
제곱근을 제외하고.
-mveclibabi=유형
외부 라이브러리를 사용하여 내장 함수를 벡터화하는 데 사용할 ABI 유형을 지정합니다.
지원되는 값 유형 are svml 인텔 짧은 벡터 수학 라이브러리 및 ACML
AMD 수학 코어 라이브러리용. 이 옵션을 사용하려면 둘 다 -ftree 벡터화 and
-재미있는 수학 최적화 활성화해야 하며 SVML 또는 ACML ABI 호환
라이브러리는 링크 시간에 지정되어야 합니다.
GCC는 현재 "vmldExp2", "vmldLn2", "vmldLog102", "vmldLog102"에 대한 호출을 내보냅니다.
"vmldPow2", "vmldTanh2", "vmldTan2", "vmldAtan2", "vmldAtanh2", "vmldCbrt2",
"vmldSinh2", "vmldSin2", "vmldAsinh2", "vmldAsin2", "vmldCosh2", "vmldCos2",
"vmldAcosh2", "vmldAcos2", "vmlsExp4", "vmlsLn4", "vmlsLog104", "vmlsLog104",
"vmlsPow4", "vmlsTanh4", "vmlsTan4", "vmlsAtan4", "vmlsAtanh4", "vmlsCbrt4",
"vmlsSinh4", "vmlsSin4", "vmlsAsinh4", "vmlsAsin4", "vmlsCosh4", "vmlsCos4",
해당 기능 유형에 대한 "vmlsAcosh4" 및 "vmlsAcos4" -mveclibabi=svml is
사용 및 "__vrd2_sin", "__vrd2_cos", "__vrd2_exp", "__vrd2_log", "__vrd2_log2",
"__vrd2_log10", "__vrs4_sinf", "__vrs4_cosf", "__vrs4_expf", "__vrs4_logf",
해당 기능 유형에 대한 "__vrs4_log2f", "__vrs4_log10f" 및 "__vrs4_powf"
언제 -mveclibabi=acml 사용.
-마비=name
지정된 호출 규칙에 대한 코드를 생성합니다. 허용되는 값은 시스템 for
GNU/Linux 및 기타 시스템에서 사용되는 ABI, ms 마이크로소프트 ABI용. NS
기본값은 Microsoft Windows 및 SysV ABI를 대상으로 할 때 Microsoft ABI를 사용하는 것입니다.
다른 모든 시스템에서. 다음을 사용하여 특정 기능에 대한 이 동작을 제어할 수 있습니다.
함수 속성 "ms_abi" 및 "sysv_abi".
-mtls-방언=유형
다음을 사용하여 스레드 로컬 저장소에 액세스하는 코드 생성 암소 비슷한 일종의 영양 or gnu2 관례. 암소 비슷한 일종의 영양
보수적 기본값입니다. gnu2 더 효율적이지만 컴파일 및 실행을 추가할 수 있습니다.
모든 시스템에서 충족될 수 없는 시간 요구 사항.
-mpush-인수
-mno-푸시 인수
PUSH 작업을 사용하여 나가는 매개변수를 저장합니다. 이 방법은 더 짧고 일반적으로
SUB/MOV 작업을 사용하는 방법과 동일하게 빠르며 기본적으로 활성화되어 있습니다. 일부에서는
이 기능을 비활성화하면 일정이 개선되고
종속성.
-maccumulate-outgoing-args
활성화하면 나가는 인수에 필요한 최대 공간이 다음에서 계산됩니다.
기능 프롤로그. 이것은 감소하기 때문에 대부분의 최신 CPU에서 더 빠릅니다.
종속성, 향상된 스케줄링 및 스택 사용 감소
경계는 2와 같지 않습니다. 단점은 코드 크기가 눈에 띄게 증가한다는 것입니다. 이것
스위치 의미 -mno-푸시 인수.
-m스레드
MinGW에서 스레드로부터 안전한 예외 처리를 지원합니다. 스레드 안전에 의존하는 프로그램
예외 처리는 모든 코드를 컴파일하고 링크해야 합니다. -m스레드 옵션. 언제
컴파일, -m스레드 정의 -D_MT; 연결할 때 특수 스레드 도우미에 연결됩니다.
도서관 -lmingwthrd 스레드별 예외 처리 데이터를 정리합니다.
-mno-align-stringops
인라인된 문자열 작업의 대상을 정렬하지 마십시오. 이 스위치는 코드를 줄입니다
대상이 이미 정렬된 경우 크기가 커지고 성능이 향상되지만 GCC는
그것에 대해 모릅니다.
-minline-all-stringops
기본적으로 GCC는 대상이 다음과 같이 알려진 경우에만 문자열 작업을 인라인합니다.
최소 4바이트 경계로 정렬됩니다. 이것은 더 많은 인라인을 가능하게 하고 코드를 증가시킵니다.
크기는 작지만 빠른 "memcpy", "strlen" 및
짧은 길이의 경우 "memset".
-minline-stringops-동적으로
크기를 알 수 없는 문자열 작업의 경우 작은 크기에 대해 인라인 코드와 함께 런타임 검사를 사용합니다.
블록 및 큰 블록에 대한 라이브러리 호출.
-mstringop-전략=ALG
특정 알고리즘에 사용할 내부 결정 휴리스틱을 재정의합니다.
인라인 문자열 연산. 허용되는 값 ALG 위치 :
담당자_바이트
담당자_4바이트
담당자_8바이트
지정된 크기의 i386 "rep" 접두사를 사용하여 확장합니다.
바이트 루프
고리
unrolled_loop
인라인 루프로 확장합니다.
라이브러리 호출
항상 라이브러리 호출을 사용하십시오.
-mmemcpy-전략=전략
내부 결정 휴리스틱을 재정의하여 "__builtin_memcpy"를 지정해야 하는지 여부를 결정합니다.
인라인 및 복사 작업의 예상 크기 때 사용할 인라인 알고리즘
알려져있다. 전략 는 쉼표로 구분된 목록입니다. ALG:최대 크기:대상_정렬 세 쌍둥이. ALG
에 지정되어 있습니다 -mstringop-전략, 최대 크기 최대 바이트 크기를 지정합니다.
인라인 알고리즘 ALG 허용됩니다. 마지막 트리플렛의 경우, 최대 크기 "-1"이어야 합니다. NS
최대 크기 목록에 있는 삼중항 중 오름차순으로 지정해야 합니다. NS
최소 바이트 크기 ALG 첫 번째 삼중항의 경우 0이고 "최대 크기 + 1" 의
이전 범위.
-mmemset-전략=전략
옵션은 다음과 유사합니다. -mmemcpy-전략= 통제하는 것 외에는
"__builtin_memset" 확장.
-momit-리프 프레임 포인터
리프 함수에 대한 레지스터에 프레임 포인터를 유지하지 마십시오. 이것은 피한다
프레임 포인터를 저장, 설정 및 복원하고 추가 레지스터를 만드는 명령
리프 함수에서 사용할 수 있습니다. 옵션 -fomit-리프-프레임-포인터 프레임을 제거
디버깅을 더 어렵게 만들 수 있는 리프 함수에 대한 포인터입니다.
-mtls-직접-세그-refs
-mno-tls-direct-seg-refs
TLS 세그먼트의 오프셋을 사용하여 TLS 변수에 액세스할 수 있는지 여부를 제어합니다.
레지스터(32비트의 경우 %gs, 64비트의 경우 %fs) 또는 스레드 기반 포인터가 다음과 같아야 하는지 여부
추가했습니다. 이것이 유효한지 여부는 운영 체제에 따라 다릅니다.
전체 TLS 영역을 포함하도록 세그먼트를 매핑합니다.
GNU C 라이브러리를 사용하는 시스템의 경우 기본값은 켜짐입니다.
-msse2avx
-mno-sse2avx
어셈블러가 VEX 접두사로 SSE 명령어를 인코딩해야 함을 지정합니다. 옵션
-mavx 기본적으로 이 기능을 켭니다.
-엠펜트리
-mno-펜트리
프로파일링이 활성화된 경우(-페이지), 프롤로그 앞에 프로파일링 카운터 호출을 넣습니다.
참고: x86 아키텍처에서 "ms_hook_prologue" 속성은
순간 -엠펜트리 and -페이지.
-mrecord-mcount
-mno-레코드-mcount
프로파일링이 활성화된 경우(-페이지), 포인터가 포함된 __mcount_loc 섹션을 생성합니다.
각 프로파일링 호출에. 이것은 자동으로 패치를 적용하고 호출을 종료하는 데 유용합니다.
-mnop-mcount
-mno-nop-mcount
프로파일링이 활성화된 경우(-페이지), 프로파일링 함수에 대한 호출을 nops로 생성합니다.
이것은 나중에 동적으로 패치되어야 할 때 유용합니다. 이것은 아마도
함께 유용한 -mrecord-mcount.
-mskip-rax-설정
-mno-건너뛰기-rax-설정
SSE 확장이 비활성화된 x86-64 아키텍처용 코드를 생성할 때
-건너뛰기-rax-설정 변수가 없을 때 RAX 레지스터 설정을 건너뛰는 데 사용할 수 있습니다.
벡터 레지스터에 전달된 인수.
경고: RAX 레지스터는 불필요하게 벡터 레지스터를 저장하는 것을 피하기 위해 사용되기 때문에
스택 변수 인수를 전달할 때 이 옵션의 영향은 호출 수신자가
스택 공간을 낭비하거나 잘못된 행동을 하거나 임의의 위치로 점프합니다. GCC 4.4 이상
RAX 레지스터 값에 관계없이 이러한 문제가 없습니다.
-m8bit-idiv
-mno-8bit-idiv
Intel Atom과 같은 일부 프로세서에서는 8비트 부호 없는 정수 나누기가 다음보다 훨씬 빠릅니다.
32비트/64비트 정수 나누기. 이 옵션은 런타임 검사를 생성합니다. 만약 둘 다
피제수와 제수가 0에서 255 사이의 범위에 있고 8비트 부호 없는 정수 나누기는 다음과 같습니다.
32비트/64비트 정수 나누기 대신 사용됩니다.
-mavx256-분할-정렬되지 않은-로드
-mavx256-분할-정렬되지 않은-저장
32바이트 AVX 정렬되지 않은 로드 및 저장을 분할합니다.
-mstack-보호자-가드=가드
에서 canary를 사용하여 스택 보호 코드 생성 가드. 지원되는 위치는 글로벌
글로벌 카나리아 또는 TLS TLS 블록의 스레드별 카나리아용(기본값). 이것
옵션은 다음 경우에만 적용됩니다. -fstack 보호기 or -fstack-프로텍터-all 이 지정됩니다.
Bowman의 -m 스위치는 86비트의 x64-64 프로세서에서 위의 항목에 추가로 지원됩니다.
환경.
-m32
-m64
-mx32
-m16
16비트, 32비트 또는 64비트 환경용 코드를 생성합니다. NS -m32 옵션 세트 "int",
"long", 포인터 유형은 32비트이며 모든 i386 시스템에서 실행되는 코드를 생성합니다.
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 -m64 옵션은 "int"를 32비트로 설정하고 "long"을 64비트로 포인터 유형을 설정합니다.
x86-64 아키텍처용 코드를 생성합니다. 다윈에게만 -m64 옵션도
끄다 -fno-pic and -mdynamic-no-pic 옵션을 제공합니다.
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 -mx32 옵션은 "int", "long" 및 포인터 유형을 32비트로 설정하고 코드를 생성합니다.
x86-64 아키텍처용.
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 -m16 옵션은 다음과 같습니다. -m32, ".code16gcc"를 출력한다는 점을 제외하고
바이너리가 실행될 수 있도록 어셈블리 출력의 시작 부분에 어셈블리 지시문
16비트 모드에서.
-mno-레드-존
x86-64 코드에 대해 소위 "레드존"을 사용하지 마십시오. 레드존은
x86-64 ABI; 스택 포인터의 위치를 벗어난 128바이트 영역입니다.
신호 또는 인터럽트 핸들러에 의해 수정되므로 임시 데이터에 사용할 수 있습니다.
스택 포인터를 조정하지 않고 깃발 -mno-레드-존 이 빨간색 영역을 비활성화합니다.
-mcmodel=작은
작은 코드 모델을 위한 코드 생성: 프로그램과 해당 기호는 다음 위치에 연결되어야 합니다.
주소 공간의 하위 2GB. 포인터는 64비트입니다. 프로그램 수
정적으로 또는 동적으로 연결됩니다. 이것은 기본 코드 모델입니다.
-mcmodel=커널
커널 코드 모델에 대한 코드를 생성합니다. 커널은 음의 2GB에서 실행됩니다.
주소 공간. 이 모델은 Linux 커널 코드에 사용해야 합니다.
-mcmodel=중간
중형 모델용 코드 생성: 프로그램은 하위 2GB에 링크됩니다.
주소 공간. 작은 기호도 거기에 배치됩니다. 다음보다 큰 크기의 기호
-mlarge-데이터-임계값 대용량 데이터 또는 BSS 섹션에 배치되고 위치를 찾을 수 있습니다.
2GB 이상. 프로그램은 정적으로 또는 동적으로 링크될 수 있습니다.
-mcmodel=대형
대형 모델에 대한 코드를 생성합니다. 이 모델은 주소에 대해 가정하지 않습니다.
섹션의 크기.
-maddress 모드=긴
긴 주소 모드에 대한 코드를 생성합니다. 64비트 및 x32에서만 지원됩니다.
환경. 64비트 환경의 기본 주소 모드입니다.
-maddress-mode=짧음
짧은 주소 모드에 대한 코드를 생성합니다. 이것은 32비트 및 x32에서만 지원됩니다.
환경. 32비트 및 x32 환경의 기본 주소 모드입니다.
x86 Windows 옵션
다음 추가 옵션은 Microsoft Windows 대상에 사용할 수 있습니다.
-mconsole
이 옵션은 콘솔 애플리케이션이 생성되도록 지정합니다.
콘솔 응용 프로그램에 필요한 PE 헤더 하위 시스템 유형을 설정하는 링커.
이 옵션은 Cygwin 및 MinGW 대상에서 사용할 수 있으며 기본적으로 다음에서 활성화됩니다.
그 목표.
-mdll
이 옵션은 Cygwin 및 MinGW 대상에 사용할 수 있습니다. DLL---a
동적 링크 라이브러리가 생성되어 필요한 항목을 선택할 수 있습니다.
런타임 시작 개체 및 진입점.
-mnop-재미-dllimport
이 옵션은 Cygwin 및 MinGW 대상에 사용할 수 있습니다. 다음을 지정합니다.
"dllimport" 속성은 무시해야 합니다.
--mthread.
이 옵션은 MinGW 대상에 사용할 수 있습니다. MinGW 특정 스레드를 지정합니다.
지원을 사용해야 합니다.
-뮤니코드
이 옵션은 MinGW-w64 대상에 사용할 수 있습니다. "UNICODE" 전처리기가 발생합니다.
매크로를 미리 정의하고 유니코드 지원 런타임 시작 코드를 선택합니다.
-mwin32
이 옵션은 Cygwin 및 MinGW 대상에 사용할 수 있습니다. 그것은 전형적인
Microsoft Windows 사전 정의 매크로는 전처리기에서 설정해야 하지만 설정하지 않습니다.
런타임 라이브러리/시작 코드 선택에 영향을 줍니다.
-mwindows
이 옵션은 Cygwin 및 MinGW 대상에 사용할 수 있습니다. GUI를 지정합니다.
응용 프로그램은 링커에 PE 헤더를 설정하도록 지시하여 생성됩니다.
적절하게 하위 시스템 유형을 지정합니다.
-fno-set-stack-실행 가능
이 옵션은 MinGW 대상에 사용할 수 있습니다. 실행 가능한 플래그를 지정합니다.
중첩 함수에서 사용하는 스택이 설정되지 않았습니다. 이것은 실행 중인 바이너리에 필요합니다.
Microsoft Windows의 커널 모드에서 설정하는 데 사용되는 User32 API가 있습니다.
실행 권한을 사용할 수 없습니다.
-fwritable-재배치-rdata
이 옵션은 MinGW 및 Cygwin 대상에 사용할 수 있습니다. 재배치됨을 지정합니다.
읽기 전용 섹션의 데이터는 .data 섹션에 넣습니다. 이것은 노인에게 필요합니다.
의사 재배치에 대한 .rdata 섹션 수정을 지원하지 않는 런타임.
-mpe-정렬-공통
이 옵션은 Cygwin 및 MinGW 대상에 사용할 수 있습니다. 그것은 GNU가
COMMON 변수의 올바른 정렬을 허용하는 PE 파일 형식의 확장자
코드를 생성할 때 사용해야 합니다. GCC가 다음을 감지하면 기본적으로 활성화됩니다.
구성 중에 발견된 대상 어셈블러가 이 기능을 지원합니다.
아래도 참조 x86 옵션 표준 옵션의 경우.
Xstormy16 옵션
다음 옵션은 Xstormy16에 대해 정의됩니다.
-msim
시뮬레이터에 적합한 시작 파일과 링커 스크립트를 선택하십시오.
엑스텐사 옵션
다음 옵션은 Xtensa 대상에 대해 지원됩니다.
-mconst16
-mno-const16
상수 값을 로드하기 위한 "CONST16" 명령어 사용을 활성화 또는 비활성화합니다. NS
"CONST16" 명령어는 현재 Tensilica의 표준 옵션이 아닙니다. 언제
활성화된 경우 "CONST16" 명령어는 항상 표준 "L32R" 대신 사용됩니다.
지침. "CONST16"의 사용은 "L32R"이
지시를 사용할 수 없습니다.
-머퓨즈드-매드
-mno-융합-매드
통합 곱하기/더하기 및 곱하기/빼기 명령어 사용을 활성화 또는 비활성화합니다.
부동 소수점 옵션. 부동 소수점 옵션도 설정되지 않은 경우에는 효과가 없습니다.
활성화. 융합된 곱하기/더하기 및 곱하기/빼기 명령어를 비활성화하면
컴파일러는 곱하기 및 더하기/빼기 연산에 대해 별도의 명령어를 사용합니다.
이것은 엄격한 IEEE 754 준수 결과가 필요한 일부 경우에 바람직할 수 있습니다.
필수: 융합된 곱하기 더하기/빼기 명령어는 중간을 반올림하지 않습니다.
결과를 통해 결과를 생성합니다. 배우기 에 의해 지정된 것보다 정밀도 비트
IEEE 표준. 융합 곱하기 더하기/빼기 명령어를 비활성화하면
프로그램 출력은 곱하기와 곱하기를 결합하는 컴파일러의 기능에 민감하지 않습니다.
더하기/빼기 연산.
- 직렬화 - 휘발성
-mno 직렬화 휘발성
이 옵션이 활성화되면 GCC는 "휘발성" 메모리 앞에 "MEMW" 명령어를 삽입합니다.
순차 일관성을 보장하기 위한 참조. 기본값은 - 직렬화 - 휘발성.
-mno 직렬화 휘발성 "MEMW" 명령을 생략합니다.
-mforce-no-pic
모든 사용자 모드 Xtensa 코드가 다음 위치에 있어야 하는 GNU/Linux와 같은 대상의 경우
PIC(독립 코드)에서 이 옵션은 커널 코드를 컴파일하기 위해 PIC를 비활성화합니다.
-mtext-섹션-리터럴
-mno-텍스트-섹션-리터럴
이러한 옵션은 리터럴 풀의 처리를 제어합니다. 기본값은
-mno-텍스트-섹션-리터럴, 출력의 별도 섹션에 리터럴을 배치합니다.
파일. 이를 통해 리터럴 풀을 데이터 RAM/ROM에 배치할 수 있으며
중복을 제거하기 위해 별도의 개체 파일에서 리터럴 풀을 결합하는 링커
리터럴 및 코드 크기를 개선합니다. 와 함께 -mtext-섹션-리터럴, 리터럴은
텍스트 섹션에 산재되어 가능한 한 텍스트 섹션에 가깝게 유지합니다.
참조. 이것은 큰 어셈블리 파일에 필요할 수 있습니다.
-mtarget-정렬
-mno-타겟-정렬
이 옵션이 활성화되면 GCC는 어셈블러가 자동으로 정렬하도록 지시합니다.
일부 코드 밀도를 희생시키면서 분기 패널티를 줄이기 위한 명령. NS
어셈블러는 분기 타겟을 정렬하기 위해 밀도 명령을 확장하려고 시도하고
호출 지시에 따른 지시. 선행 안전장치가 충분하지 않은 경우
목표를 정렬하기 위한 밀도 명령, 확장은 수행되지 않습니다. 기본값은
-mtarget-정렬. 이 옵션은 자동 정렬 처리에 영향을 미치지 않습니다.
어셈블러가 항상 정렬하는 "LOOP"와 같은 명령어
밀도 명령어 또는 NOP 명령어 삽입.
-긴 통화
-mno-longcalls
이 옵션이 활성화되면 GCC는 직접 호출을 다음으로 변환하도록 어셈블러에 지시합니다.
직접 호출의 대상이
호출 명령이 허용하는 범위. 이 번역은 일반적으로
다른 소스 파일의 기능. 특히, 어셈블러는 직접
"CALL" 명령어를 "L32R"로 입력한 다음 "CALLX" 명령어를 입력합니다. 기본값은
-mno-longcalls. 이 옵션은 호출 대상이 다음을 수행할 수 있는 프로그램에서 사용해야 합니다.
잠재적으로 범위를 벗어납니다. 이 옵션은 어셈블리가 아니라 어셈블러에서 구현됩니다.
컴파일러, 그래서 GCC에 의해 생성된 어셈블리 코드는 여전히 직접 호출을 보여줍니다
지침 --- 실제 지침을 보려면 디스어셈블된 개체 코드를 확인하십시오.
어셈블러는 파일 간 호출뿐만 아니라 모든 파일 간 호출에 대해 간접 호출을 사용합니다.
정말 범위를 벗어난 것들.
z 시리즈 옵션
이들은 아래에 나열됩니다
옵션 for 암호 세대 협약
이러한 기계 독립적인 옵션은 코드에서 사용되는 인터페이스 규칙을 제어합니다.
세대.
그들 대부분은 긍정적인 형태와 부정적인 형태를 모두 가지고 있습니다. 의 부정적인 형태 - 푸푸 is
-fno-foo. 아래 표에는 양식 중 하나만 나열되어 있습니다. --- 양식이 아닌 것은
기본. 다음 중 하나를 제거하여 다른 형식을 파악할 수 있습니다. 아니 - 또는 추가합니다.
-fbounds-체크
이를 지원하는 프런트 엔드의 경우 인덱스가 다음 작업에 사용되었는지 확인하는 추가 코드를 생성합니다.
액세스 배열이 선언된 범위 내에 있습니다. 이것은 현재 에 의해서만 지원됩니다.
이 옵션의 기본값은 true 및 false인 Java 및 Fortran 프런트 엔드
각각.
-fstack-재사용=재사용 수준
이 옵션은 사용자가 선언한 로컬/자동 변수에 대한 스택 공간 재사용을 제어하고
컴파일러 생성 임시. 재사용 수준 될 수 있습니다 모든, 명명된_vars및 없음. 모든
모든 지역 변수와 임시 변수에 대한 스택 재사용을 가능하게 합니다. 명명된_vars 가능
이름이 있는 사용자 정의 지역 변수에만 재사용 없음 스택 재사용 비활성화
완전히. 기본값은 모든. 프로그램이 확장될 때 옵션이 필요합니다.
범위가 지정된 지역 변수의 수명 또는 컴파일러가
언어에 의해 정의된 끝점. 변수의 수명이 끝나면
변수가 메모리에 있으면 최적화 컴파일러는 스택을 자유롭게 재사용할 수 있습니다.
라이브 범위가 적용되지 않는 다른 임시 또는 범위가 지정된 지역 변수가 있는 공간
그것과 겹칩니다. 로컬 수명을 연장하는 레거시 코드는
스택 재사용 최적화.
예를 들어,
정수 *p;
{
정수 로컬1;
p = &local1;
지역1 = 10;
....
}
{
정수 로컬2;
지역2 = 20;
...
}
if (*p == 10) // local1 사용 범위를 벗어남
{
}
또 다른 예 :
구조체 A
{
A(int k) : i(k), j(k) { }
int i;
정수 j;
};
*ap;
무효 foo(const A& ar)
{
ap = &ar;
}
무효 바()
{
푸(A(10)); // foo가 반환되면 임시 객체의 수명이 종료됩니다.
{
A a(20);
....
}
ap->i+= 10; // ap은 공백이 있는 범위 temp를 참조하지 않습니다.
// a와 함께 재사용됩니다. ap->i의 값은 무엇입니까?
}
임시로 생성된 컴파일러의 수명은 C++ 표준에 잘 정의되어 있습니다.
임시의 수명이 끝나고 임시가 메모리에 있는 경우
최적화 컴파일러는 스택 공간을 다른 임시 또는
라이브 범위와 겹치지 않는 범위가 지정된 지역 변수. 그러나 일부
레거시 코드는 임시 스택이 있는 이전 컴파일러의 동작에 의존합니다.
공간이 재사용되지 않으면 공격적인 스택 재사용으로 인해 런타임 오류가 발생할 수 있습니다. 이것
옵션은 임시 스택 재사용 최적화를 제어하는 데 사용됩니다.
-ftrapv.
이 옵션은 덧셈, 뺄셈,
곱셈 연산.
-fwrapv
이 옵션은 컴파일러가 부호 있는 산술 오버플로를 가정하도록 지시합니다.
덧셈, 뺄셈 및 곱셈은 XNUMX의 보수를 사용하여 감쌉니다.
대표. 이 플래그는 일부 최적화를 활성화하고 나머지는 비활성화합니다. 이것
옵션은 Java 언어에서 요구하는 대로 Java 프런트 엔드에 대해 기본적으로 활성화됩니다.
사양.
-예외
예외 처리를 활성화합니다. 예외를 전파하는 데 필요한 추가 코드를 생성합니다. 을위한
일부 대상, 이는 GCC가 모든 기능에 대한 프레임 해제 정보를 생성함을 의미합니다.
영향을 미치지는 않지만 상당한 데이터 크기 오버헤드를 생성할 수 있습니다.
실행. 이 옵션을 지정하지 않으면 GCC에서 기본적으로 언어에 대해 활성화합니다.
일반적으로 예외 처리가 필요하고 다음과 같은 언어에 대해서는 비활성화하는 C++와 같습니다.
C는 일반적으로 필요하지 않습니다. 그러나 다음과 같은 경우 이 옵션을 활성화해야 할 수도 있습니다.
작성된 예외 처리기와 제대로 상호 운용해야 하는 C 코드 컴파일
C++에서. 이전 C++를 컴파일하는 경우 이 옵션을 비활성화할 수도 있습니다.
예외 처리를 사용하지 않는 프로그램.
-fnon-call-exception
트래핑 명령이 예외를 throw하도록 허용하는 코드를 생성합니다. 이
어디에나 존재하지 않는 플랫폼별 런타임 지원이 필요합니다. 게다가,
그것은 단지 허용 함정 예외를 던지는 명령, 즉 메모리 참조 또는
부동 소수점 명령어. 임의의 예외가 발생하는 것을 허용하지 않습니다.
"SIGALRM"과 같은 신호 처리기.
-fdelete-dead-예외
예외를 던질 수 있지만 달리 기여하지 않는 명령을 고려하십시오.
프로그램 실행을 최적화할 수 있습니다. 이 옵션은 기본적으로 활성화되어 있습니다.
Ada 언어 사양에서 허용하는 대로 Ada 프런트 엔드용입니다. 최적화
죽은 예외가 제거되도록 하는 패스는 서로 다른 위치에서 독립적으로 활성화됩니다.
최적화 수준.
-펀윈드 테이블
유사하게 -예외, 필요한 정적 데이터를 생성한다는 점을 제외하고는
다른 방식으로 생성된 코드에 영향을 주지 않습니다. 당신은 일반적으로 할 필요가 없습니다
이 옵션을 활성화하십시오. 대신 이 처리가 필요한 언어 프로세서가
사용자를 대신하여.
-fasynchronous-unwind-tables
대상 시스템에서 지원하는 경우 DWARF 2 형식으로 해제 테이블을 생성합니다. 테이블은
각 명령어 경계에서 정확하므로 스택 해제에 사용할 수 있습니다.
비동기 이벤트(예: 디버거 또는 가비지 수집기).
-fno-gnu-고유
최근 GNU 어셈블러와 C 라이브러리가 있는 시스템에서 C++ 컴파일러는 다음을 사용합니다.
템플릿 정적 데이터 멤버의 정의를 확인하는 "STB_GNU_UNIQUE" 바인딩
인라인 함수의 정적 지역 변수는 다음이 있는 경우에도 고유합니다.
"RTLD_LOCAL"; 이것은 두 개의 서로 다른 라이브러리가 사용하는 라이브러리의 문제를 피하기 위해 필요합니다.
"RTLD_LOCAL" 플러그인은 그 중 하나의 정의에 따라 다르므로
상징의 바인딩에 대해 다른 하나와 동의하지 않습니다. 그러나 이로 인해
영향을 받는 DSO에 대해 "dlclose"를 무시합니다. 프로그램이 재초기화에 의존하는 경우
"dlclose" 및 "dlopen"을 통한 DSO의 경우 다음을 사용할 수 있습니다. -fno-gnu-고유.
-fpcc-구조체-반환
메모리에 있는 "short" "struct" 및 "union" 값을 더 긴 값처럼 반환합니다.
레지스터. 이 규칙은 덜 효율적이지만 다음을 허용하는 이점이 있습니다.
GCC로 컴파일된 파일과 다른 컴파일러로 컴파일된 파일 간의 상호호출성,
특히 휴대용 C 컴파일러(pcc).
메모리에서 구조를 반환하는 정확한 규칙은 대상에 따라 다릅니다.
구성 매크로.
짧은 구조와 공용체는 크기와 정렬이 일부 구조와 일치하는 것입니다.
정수형.
경고: 로 컴파일된 코드 -fpcc-구조체-반환 스위치가 바이너리와 호환되지 않습니다
로 컴파일된 코드로 -freg-구조체-반환 스위치. 규정에 맞지 않게 사용하십시오.
기본 애플리케이션 바이너리 인터페이스.
-freg-구조체-반환
가능한 경우 레지스터에서 "구조체" 및 "결합" 값을 반환합니다. 이게 더 효율적이다
보다 작은 구조물의 경우 -fpcc-구조체-반환.
둘 다 지정하지 않으면 -fpcc-구조체-반환 ...도 아니다 -freg-구조체-반환, GCC는 기본적으로
어떤 규칙이 대상에 대한 표준입니다. 표준 규약이 없는 경우,
GCC는 기본적으로 -fpcc-구조체-반환, GCC가 주요 대상인 대상 제외
컴파일러. 이 경우 표준을 선택할 수 있으며 더 효율적인
등록 반환 대안.
경고: 로 컴파일된 코드 -freg-구조체-반환 스위치가 바이너리와 호환되지 않습니다
로 컴파일된 코드로 -fpcc-구조체-반환 스위치. 규정에 맞지 않게 사용하십시오.
기본 애플리케이션 바이너리 인터페이스.
-fshort 열거형
선언된 범위에 필요한 만큼만 "열거형" 유형에 할당합니다.
가능한 값. 특히 "enum" 유형은 가장 작은 정수와 동일합니다.
충분한 공간이 있는 유형.
경고: 전에, -fshort 열거형 스위치로 인해 GCC가 바이너리가 아닌 코드를 생성합니다.
해당 스위치 없이 생성된 코드와 호환됩니다. 규정에 맞지 않게 사용하십시오.
기본 애플리케이션 바이너리 인터페이스.
-fshort-더블
"float"에 대해 "double"에 동일한 크기를 사용합니다.
경고: 전에, -fshort-더블 스위치로 인해 GCC가 바이너리가 아닌 코드를 생성합니다.
해당 스위치 없이 생성된 코드와 호환됩니다. 규정에 맞지 않게 사용하십시오.
기본 애플리케이션 바이너리 인터페이스.
-fshort-wchar
"wchar_t"의 기본 유형을 "short unsigned int" 대신 재정의합니다.
대상에 대한 기본값입니다. 이 옵션은 아래에서 실행할 프로그램을 빌드하는 데 유용합니다.
와인.
경고: 전에, -fshort-wchar 스위치로 인해 GCC가 바이너리가 아닌 코드를 생성합니다.
해당 스위치 없이 생성된 코드와 호환됩니다. 규정에 맞지 않게 사용하십시오.
기본 애플리케이션 바이너리 인터페이스.
-fno-공통
C 코드에서 초기화되지 않은 전역 변수의 배치를 제어합니다. 유닉스 C 컴파일러
전통적으로 이러한 변수에 대해 여러 정의를 허용했습니다.
변수를 공통 블록에 배치하여 컴파일 단위를 만듭니다. 이것이 행동이다
에 의해 지정된 -f공통이며 대부분의 대상에서 GCC의 기본값입니다. 반면에,
이 동작은 ISO C에서 요구하지 않으며 일부 대상에서는 속도 또는 코드가 포함될 수 있습니다.
변수 참조에 대한 크기 페널티. NS -fno-공통 옵션은 다음을 지정합니다.
컴파일러는 객체의 데이터 섹션에 초기화되지 않은 전역 변수를 배치해야 합니다.
파일을 일반 블록으로 생성하지 않습니다. 이는 다음과 같은 효과가 있습니다.
두 개의 다른 컴파일에서 동일한 변수가 선언되면("extern" 없이) 다음을 얻습니다.
링크할 때 다중 정의 오류가 발생합니다. 이 경우 다음으로 컴파일해야 합니다.
-f공통 대신에. 컴파일 -fno-공통 대상에 유용합니다.
더 나은 성능을 제공하거나 프로그램이 작동하는지 확인하려는 경우
초기화되지 않은 변수 선언을 항상 이런 식으로 처리하는 다른 시스템.
-fno-ident
"#ident" 지시문을 무시하십시오.
-finhibit-size-지시어
".size" 어셈블러 지시문이나 문제를 일으킬 수 있는 다른 것을 출력하지 마십시오.
함수가 중간에 분할되고 두 개의 절반이 멀리 떨어진 위치에 배치되는 경우
기억에 따로. 이 옵션은 컴파일할 때 사용됩니다. crtstuff.c; 당신은 필요하지 않습니다
다른 용도로 사용합니다.
-fverbose-asm
생성된 어셈블리 코드에 추가 주석 정보를 추가하여
읽을 수 있습니다. 이 옵션은 일반적으로 실제로 읽을 필요가 있는 사람들에게만 사용됩니다.
생성된 어셈블리 코드(아마도 컴파일러 자체를 디버깅하는 동안).
-fno-verbose-asm, 기본값은 추가 정보가 생략되도록 하고
두 개의 어셈블러 파일을 비교할 때 유용합니다.
-frecord-gcc-스위치
이 스위치를 사용하면 컴파일러를 호출하는 데 사용되는 명령줄이
생성 중인 개체 파일입니다. 이 스위치는 일부에서만 구현됩니다.
대상 및 녹음의 정확한 형식은 대상 및 바이너리 파일 형식입니다.
종속적이지만 일반적으로 ASCII 텍스트가 포함된 섹션 형식을 취합니다. 이것
스위치는 다음과 관련이 있습니다. -fverbose-asm 스위치, 하지만 그 스위치는 기록만
어셈블러 출력 파일의 정보를 주석으로 사용하므로 개체에 도달하지 않습니다.
파일. 또한보십시오 -grecord-gcc-스위치 컴파일러 옵션을 저장하는 또 다른 방법
목적 파일.
-fpic
다음과 같은 경우 공유 라이브러리에서 사용하기에 적합한 위치 독립 코드(PIC)를 생성합니다.
대상 머신에 대해 지원됩니다. 이러한 코드는 다음을 통해 모든 상수 주소에 액세스합니다.
글로벌 오프셋 테이블(GOT). 동적 로더는 다음과 같은 경우 GOT 항목을 해결합니다.
프로그램이 시작됩니다(동적 로더는 GCC의 일부가 아닙니다.
체계). 링크된 실행 파일의 GOT 크기가 시스템별 최대값을 초과하는 경우
크기를 지정하면 링커에서 다음을 나타내는 오류 메시지가 나타납니다. -fpic 작동하지 않습니다. ~에
이 경우 다음으로 다시 컴파일하십시오. -fPIC 대신에. (이 최대값은 SPARC의 경우 8k이고 32k입니다.
m68k 및 RS/6000에서. x86에는 그러한 제한이 없습니다.)
위치 독립 코드에는 특별한 지원이 필요하므로 다음에서만 작동합니다.
특정 기계. x86의 경우 GCC는 System V용 PIC를 지원하지만 Sun용은 지원하지 않습니다.
386i. IBM RS/6000용으로 생성된 코드는 항상 위치 독립적입니다.
이 플래그가 설정되면 매크로 "__pic__" 및 "__PIC__"가 1로 정의됩니다.
-fPIC
대상 머신에 대해 지원되는 경우 위치 독립적인 코드를 내보냅니다.
동적 연결 및 전역 오프셋 테이블 크기 제한 방지. 이것
옵션은 m68k, PowerPC 및 SPARC에서 차이를 만듭니다.
위치 독립 코드에는 특별한 지원이 필요하므로 다음에서만 작동합니다.
특정 기계.
이 플래그가 설정되면 매크로 "__pic__" 및 "__PIC__"가 2로 정의됩니다.
-파이
-fPIE
이러한 옵션은 다음과 유사합니다. -fpic and -fPIC, 그러나 생성된 위치 독립 코드
실행 파일에만 연결할 수 있습니다. 일반적으로 이러한 옵션은 다음과 같은 경우에 사용됩니다. -파이 GCC
옵션은 링크 중에 사용됩니다.
-파이 and -fPIE 둘 다 "__pie__" 및 "__PIE__" 매크로를 정의합니다. 매크로에는
값 1 -파이 및 2 for -fPIE.
-fno-점프 테이블
더 효율적인 경우에도 switch 문에 점프 테이블을 사용하지 마십시오.
다른 코드 생성 전략보다 이 옵션은 다음과 함께 사용됩니다.
-fpic or -fPIC 동적 링커의 일부를 형성하고 할 수 없는 코드를 작성하기 위해
점프 테이블의 주소를 참조하십시오. 일부 대상에서는 점프 테이블이 필요하지 않습니다.
GOT 및 이 옵션은 필요하지 않습니다.
-고정-등록 번호
명명된 레지스터를 처리합니다. 등록 번호 고정 레지스터로; 생성된 코드는 다음을 참조해서는 안 됩니다.
(아마도 스택 포인터, 프레임 포인터 또는 다른 고정 역할을 제외하고).
등록 번호 레지스터의 이름이어야 합니다. 허용되는 레지스터 이름은 시스템에 따라 다릅니다.
기계 설명 매크로 파일의 "REGISTER_NAMES" 매크로에 정의되어 있습니다.
이 플래그는 XNUMX방향 선택을 지정하기 때문에 음수 형식을 갖지 않습니다.
-fcall 사용-등록 번호
명명된 레지스터를 처리합니다. 등록 번호 기능에 의해 차단되는 할당 가능한 레지스터로
전화. 그것은 임시 또는 변수에 걸쳐 살지 않는 변수에 할당될 수 있습니다.
전화. 이 방법으로 컴파일된 함수는 레지스터를 저장 및 복원하지 않습니다. 등록 번호.
프레임 포인터 또는 스택 포인터와 함께 이 플래그를 사용하는 것은 오류입니다. 이것의 사용
기계 실행에서 고정된 퍼베이시브 역할이 있는 다른 레지스터에 대한 플래그
모델은 비참한 결과를 낳습니다.
이 플래그는 XNUMX방향 선택을 지정하기 때문에 음수 형식을 갖지 않습니다.
-fcall 저장-등록 번호
명명된 레지스터를 처리합니다. 등록 번호 함수에 의해 저장된 할당 가능한 레지스터로. 그것은 수 있습니다
호출에 걸쳐 있는 임시 또는 변수에도 할당됩니다. 기능
이 방법으로 컴파일하여 레지스터를 저장하고 복원합니다. 등록 번호 그들이 그것을 사용한다면.
프레임 포인터 또는 스택 포인터와 함께 이 플래그를 사용하는 것은 오류입니다. 이것의 사용
기계 실행에서 고정된 퍼베이시브 역할이 있는 다른 레지스터에 대한 플래그
모델은 비참한 결과를 낳습니다.
레지스터에 이 플래그를 사용하면 다른 종류의 재난이 발생합니다.
함수 값이 반환될 수 있습니다.
이 플래그는 XNUMX방향 선택을 지정하기 때문에 음수 형식을 갖지 않습니다.
-fpack-구조체[=n]
값을 지정하지 않으면 모든 구조 부재를 구멍 없이 함께 포장합니다. 언제
값이 지정됨(XNUMX의 작은 거듭제곱이어야 함), 팩 구조 멤버
이 값에 따라 최대 정렬을 나타내는(즉,
이보다 큰 기본 정렬 요구 사항은 잠재적으로 정렬되지 않은 상태로 출력됩니다.
다음 피팅 위치.
경고: 전에, -fpack-구조체 스위치로 인해 GCC가 바이너리가 아닌 코드를 생성합니다.
해당 스위치 없이 생성된 코드와 호환됩니다. 또한 코드를
차선책. 기본이 아닌 응용 프로그램 바이너리 인터페이스를 준수하는 데 사용합니다.
- 기구 기능
함수에 대한 진입 및 종료를 위한 계측 호출을 생성합니다. 함수 직후
항목 및 함수 종료 직전에 다음과 같은 프로파일링 함수가 다음과 같이 호출됩니다.
현재 함수 및 호출 사이트의 주소입니다. (일부 플랫폼에서는
"__builtin_return_address"는 현재 기능 이상으로 작동하지 않으므로 호출 사이트
그렇지 않으면 프로파일링 기능에 정보가 제공되지 않을 수 있습니다.)
무효 __cyg_profile_func_enter (무효 *this_fn,
무효 *call_site);
무효 __cyg_profile_func_exit (무효 *this_fn,
무효 *call_site);
첫 번째 인수는 현재 함수의 시작 주소입니다.
기호 테이블에서 정확히 조회했습니다.
이 계측은 다른 기능에서 인라인으로 확장된 기능에 대해서도 수행됩니다.
프로파일링 호출은 개념적으로 인라인 함수가 입력되는 위치와
나갔어. 이는 이러한 기능의 주소 지정 가능한 버전을 사용할 수 있어야 함을 의미합니다. 만약에
함수의 모든 사용은 인라인으로 확장됩니다. 이는 추가 확장을 의미할 수 있습니다.
코드 크기. C 코드에서 "extern inline"을 사용하는 경우 주소 지정 가능한 버전의
그러한 기능이 제공되어야 합니다. (어쨌든 일반적으로 이런 경우이지만,
운이 좋고 옵티마이저는 항상 함수를 인라인으로 확장합니다.
정적 복사본을 제공하지 않고 제거합니다.)
함수에는 "no_instrument_function" 속성이 부여될 수 있습니다. 이 경우
계측이 수행되지 않습니다. 예를 들어 프로파일링에 사용할 수 있습니다.
위에 나열된 기능, 우선 순위가 높은 인터럽트 루틴 및
프로파일링 함수는 안전하게 호출될 수 없습니다(아마도 신호 처리기가
프로파일링 루틴은 출력을 생성하거나 메모리를 할당합니다.
-finstrument-기능-제외-파일-목록=파일,파일, ...
계측에서 제외되는 기능 목록을 설정합니다(설명 참조
of - 기구 기능). 함수 정의가 포함된 파일이 일치하는 경우
중 하나와 파일, 그 기능은 계측되지 않습니다. 경기는
부분 문자열: 만약 파일 매개변수는 파일 이름의 하위 문자열이며 다음으로 간주됩니다.
시합이 되십시오.
예 :
-finstrument-functions-exclude-file-list=/bits/stl,include/sys
경로 이름에 다음이 포함된 파일에 정의된 모든 인라인 함수 제외 /비트/stl or
포함/시스템.
어떤 이유로 편지를 포함하려는 경우 , 중 하나에서 SYM쓰기 ,. 예를 들어,
-finstrument-functions-exclude-file-list=',,tmp' (주변의 작은 따옴표에 유의하십시오.
옵션).
-finstrument-기능-제외-기능-목록=SYM,SYM, ...
이것은 다음과 유사합니다. -finstrument-functions-제외 파일 목록, 하지만 이 옵션은
계측에서 제외할 함수 이름 목록입니다. 될 함수 이름
일치하는 것은 "벡터 ㅋ(상수 벡터 &)", 아니다
내부 맹글링된 이름(예: "_Z4blahRSt6vectorIiSaIiEE"). 경기는
부분 문자열: 만약 SYM 매개변수는 함수 이름의 하위 문자열로 간주됩니다.
일치하는 것입니다. C99 및 C++ 확장 식별자의 경우 함수 이름을 지정해야 합니다.
UTF-8에서는 범용 문자 이름을 사용하지 않습니다.
-fstack-체크
스택의 경계를 넘지 않는지 확인하는 코드를 생성합니다. 너
다중 스레드가 있는 환경에서 실행 중인 경우 이 플래그를 지정해야 합니다.
그러나 스택 이후 단일 스레드 환경에서는 거의 지정하지 않아도 됩니다.
스택이 하나만 있는 경우 거의 모든 시스템에서 오버플로가 자동으로 감지됩니다.
이 스위치로 인해 실제로 검사가 수행되는 것은 아닙니다. 운영
시스템 또는 언어 런타임이 이를 수행해야 합니다. 스위치로 인해 코드 생성
스택이 확장되고 있는지 확인하십시오.
추가로 문자열 매개변수를 지정할 수 있습니다. 아니 확인하지 않음을 의미하며, 일반적인 방법
구식 검사를 강제로 사용하고, 구체적인 최상의 검사 방법을 사용하고
벌거벗은 것과 동등하다 -fstack-체크.
구식 검사는 특정 대상 지원이 필요하지 않은 일반 메커니즘입니다.
컴파일러는 다음과 같은 단점이 있습니다.
1. 큰 개체에 대한 수정된 할당 전략: 항상 할당됩니다.
크기가 고정 임계값을 초과하는 경우 동적으로
2. 함수의 정적 프레임 크기에 대한 고정 제한:
특정 기능, 스택 검사는 신뢰할 수 없으며 경고가 발행됩니다.
컴파일러.
3. 비효율성: 수정된 할당 전략과 일반
구현하면 코드 성능이 저하됩니다.
구식 스택 검사는 다음을 위한 폴백 방법이기도 합니다. 구체적인 아니라면
대상 지원이 컴파일러에 추가되었습니다.
-fstack 제한 레지스터=등록 번호
-fstack-제한-심볼=SYM
-fno-스택 제한
스택이 특정 값 이상으로 증가하지 않도록 코드를 생성합니다.
레지스터의 값 또는 기호의 주소. 더 큰 스택이 필요한 경우
신호는 런타임에 발생합니다. 대부분의 타겟의 경우 스택보다 먼저 신호가 발생합니다.
경계를 넘어서므로 특별한 조치를 취하지 않고도 신호를 잡을 수 있습니다.
예방 조치.
예를 들어 스택이 절대 주소에서 시작하는 경우 0 X 80000000 아래쪽으로 자라며,
당신은 플래그를 사용할 수 있습니다 -fstack-limit-symbol=__stack_limit and
-Wl,--defsym,__stack_limit=0x7ffe0000 128KB의 스택 제한을 적용합니다. 참고
이것은 GNU 링커에서만 작동할 수 있습니다.
-fsplit 스택
오버플로가 발생하기 전에 스택을 자동으로 분할하는 코드를 생성합니다. 결과
프로그램에는 프로그램이 수행할 수 없는 경우에만 오버플로할 수 있는 불연속 스택이 있습니다.
더 많은 메모리를 할당하십시오. 이것은 스레드 프로그램을 실행할 때 가장 유용합니다.
더 이상 각 스레드에 사용할 적절한 스택 크기를 계산할 필요가 없습니다. 이것은
현재 GNU/Linux를 실행하는 x86 대상에만 구현됩니다.
로 코드를 컴파일할 때 -fsplit 스택 없이 컴파일된 코드를 호출합니다. -fsplit 스택거기
후자의 코드를 실행하는 데 사용할 수 있는 스택 공간이 많지 않을 수 있습니다. 모두 컴파일하면
라이브러리 코드를 포함한 코드, -fsplit 스택 옵션이 아닌 경우 링커는
코드가 다음 없이 컴파일되도록 이러한 호출을 수정합니다. -fsplit 스택 항상 큰
스택. 이에 대한 지원은 GNU binutils 릴리스의 골드 링커에서 구현됩니다.
2.21 년 이후
- 밑줄을 긋다
이 옵션과 해당 옵션은 -fno 선행 밑줄, 강제로 C 방식을 변경
기호는 개체 파일에 표시됩니다. 한 가지 용도는 레거시와의 연결을 돕는 것입니다.
어셈블리 코드.
경고: 전에, - 밑줄을 긋다 스위치는 GCC가 그렇지 않은 코드를 생성하도록 합니다.
해당 스위치 없이 생성된 코드와 호환되는 바이너리. 에 맞게 사용하십시오.
기본이 아닌 응용 프로그램 바이너리 인터페이스. 모든 대상이 완전한 지원을 제공하는 것은 아닙니다.
이 스위치의 경우.
-ftls-모델=모델
사용할 스레드 로컬 저장소 모델을 변경합니다. NS 모델 인수는 다음 중 하나여야 합니다.
글로벌 다이내믹, 로컬 다이내믹, 초기 실행 or 로컬 실행. 선택 사항은 다음과 같습니다.
최적화 대상: 컴파일러는 다음이 아닌 기호에 대해 보다 효율적인 모델을 사용할 수 있습니다.
번역 단위 외부에서 볼 수 있거나 -fpic 명령줄에 제공되지 않습니다.
없는 기본값 -fpic is 초기 실행; 와 -fpic 기본값은 글로벌 다이내믹.
-가시성=[디폴트 값|내부의|숨겨진|보호]
기본 ELF 이미지 기호 가시성을 지정된 옵션으로 설정 ---모든 기호는
코드 내에서 재정의되지 않는 한 this로 표시됩니다. 이 기능을 사용하면 매우
공유 개체 라이브러리의 링크 및 로드 시간을 크게 개선하고 더 많은 것을 생성합니다.
최적화된 코드, 거의 완벽한 API 내보내기를 제공하고 기호 충돌을 방지합니다. 그것은이다
강하게 배포하는 모든 공유 개체에서 이것을 사용하는 것이 좋습니다.
명명법에도 불구하고, 디폴트 값 항상 공개를 의미합니다. 즉, 연결 가능
공유 객체 외부에서 반대합니다. 보호 and 내부의 꽤 쓸모가 없다
실제 사용 방식이므로 일반적으로 사용되는 유일한 옵션은 숨겨진. 기본값인 경우
-가시성 지정되지 않음은 디폴트 값즉, 모든 기호를 공개합니다.
ELF 기호가 올바른지 확인함으로써 제공되는 이점에 대한 좋은 설명
가시성은 Ulrich Drepper의 "How To Write Shared Libraries"에 의해 제공됩니다.
에서 발견http://www.akkadia.org/drepper/>>--그러나 우수한 솔루션을 만들었습니다.
이 옵션을 사용하면 기본값이 공개일 때 숨겨진 항목을 표시할 수 있습니다.
기본 숨김 및 공개로 표시합니다. 이것은 Windows의 DLL에 대한 표준이며
과 -fvisibility=숨김 및 "__attribute__ ((visibility("default")))" 대신
"__declspec(dllexport)" 동일한 구문으로 거의 동일한 의미를 얻습니다.
이것은 크로스 플랫폼 프로젝트를 수행하는 사람들에게 큰 이점입니다.
기존 코드에 가시성 지원을 추가하는 경우 "#pragma GCC
가시성" 사용. 이것은 설정하려는 선언을 묶음으로써 작동합니다.
(예를 들어) "#pragma GCC 가시성 push(hidden)" 및 "#pragma에 대한 가시성
GCC 가시성 팝". 심볼 가시성이 표시되어야 함을 명심하십시오. as 부품 of
전에, API 인터페이스 계약 따라서 모든 새 코드는 항상 가시성을 지정해야 합니다.
기본값이 아닙니다. 즉, 지역 DSO 내에서만 사용하기 위한 선언은 다음과 같아야 합니다.
항상 PLT 간접 참조를 피하기 위해 명시적으로 숨김으로 표시
오버헤드 ---이를 명확하게 하면 가독성과 자체 문서화에도 도움이 됩니다.
코드의. ISO C++ 사양 요구 사항으로 인해 "새로운 연산자" 및
"연산자 삭제"는 항상 기본 가시성이어야 합니다.
프로젝트 외부의 헤더, 특히 시스템 헤더 및
사용하는 다른 라이브러리의 헤더는 다음과 같이 컴파일될 것으로 예상되지 않을 수 있습니다.
기본값 이외의 가시성. 명시적으로 "#pragma GCC"라고 말해야 할 수도 있습니다.
이러한 헤더를 포함하기 전에 "visibility push(default)"를 확인하십시오.
"extern" 선언은 영향을 받지 않습니다. -가시성, 그래서 많은 코드가
로 재컴파일 -fvisibility=숨김 수정 없이. 그러나 이것은 다음을 의미합니다
명시적 가시성이 없는 "extern" 함수에 대한 호출은 PLT를 사용하므로
"__attribute((가시성))" 및/또는 "#pragma GCC 가시성"을 사용하여 알리는 데 효과적입니다.
"extern" 선언이 숨겨진 것으로 처리되어야 하는 컴파일러.
참고 -가시성 C++ 모호한 연결 엔터티에 영향을 줍니다. 이것은 다음을 의미합니다.
인스턴스, DSO 간에 throw되는 예외 클래스는 명시적으로 표시되어야 합니다.
기본 가시성으로 유형_정보 노드는 DSO 간에 통합됩니다.
이러한 기술, 이점 및 사용 방법에 대한 개요는 다음을 참조하십시오.
<http://gcc.gnu.org/wiki/Visibility>.
-fstrict-휘발성 비트 필드
이 옵션은 휘발성 비트 필드(또는 다른 구조
필드, 컴파일러는 일반적으로 어쨌든 이러한 유형을 존중하지만) 단일 필드를 사용해야 합니다.
가능한 경우 자연 정렬에 맞춰 정렬된 필드 유형의 너비에 대한 액세스.
예를 들어, 메모리 매핑된 주변 장치 레지스터가 있는 대상에는 이러한 모든 것이 필요할 수 있습니다.
16비트 폭의 액세스; 이 플래그를 사용하면 모든 주변 비트 필드를 선언할 수 있습니다.
GCC가 사용하도록 강제하려면 "unsigned short"(이 타겟에서 short가 16비트라고 가정)로
아마도 더 효율적인 16비트 액세스 대신 32비트 액세스.
이 옵션이 비활성화되면 컴파일러는 가장 효율적인 명령어를 사용합니다. 에서
이전 예에서 액세스하는 경우에도 32비트 로드 명령일 수 있습니다.
비트 필드 또는 메모리 매핑 레지스터의 어떤 부분도 포함하지 않는 바이트
업데이트되는 것과 관련이 없습니다.
"packed" 속성이 구조 필드에 적용될 때와 같은 일부 경우에는
올바른 단일 읽기 또는 쓰기로 필드에 액세스하지 못할 수 있습니다.
대상 머신에 맞춰 정렬됩니다. 이 경우 GCC는 다중 생성으로 대체됩니다.
런타임에 결과에 오류가 발생하거나 잘리는 코드가 아니라 액세스합니다.
참고: C/C++11 메모리 모델의 제한으로 인해 쓰기 액세스가 허용되지 않습니다.
비트 필드가 아닌 멤버를 터치합니다. 따라서 모든 비트를 정의하는 것이 좋습니다.
필드의 유형을 비트 필드 멤버로 사용합니다.
이 옵션의 기본값은 응용 프로그램 바이너리 인터페이스에 의해 결정됩니다.
대상 프로세서.
-fsync-libcalls
이 옵션은 "__sync" 제품군의 오프라인 인스턴스가
함수는 C++11 "__atomic" 함수 제품군을 구현하는 데 사용할 수 있습니다.
이 옵션의 기본값은 활성화되어 있으므로 옵션의 유일한 유용한 형식입니다.
is -fno-sync-libcalls. 이 옵션은 자유원자
런타임 라이브러리.
환경
이 섹션에서는 GCC 작동 방식에 영향을 주는 여러 환경 변수에 대해 설명합니다. 일부
그 중 다양한 종류를 검색할 때 사용할 디렉토리 또는 접두사를 지정하여 작동합니다.
파일의. 일부는 컴파일 환경의 다른 측면을 지정하는 데 사용됩니다.
다음과 같은 옵션을 사용하여 검색할 장소를 지정할 수도 있습니다. -B, -I and -L.
이들은 환경 변수를 사용하여 지정된 위치보다 우선합니다.
GCC 구성에서 지정한 것보다 우선합니다.
랑
LC_CTYPE
LC_메시지
LC_ALL
이러한 환경 변수는 GCC가 현지화 정보를 사용하는 방식을 제어합니다.
이를 통해 GCC는 다양한 국가 협약과 협력할 수 있습니다. GCC는 로케일을 검사합니다.
카테고리 LC_CTYPE and LC_메시지 그렇게 하도록 구성된 경우. 이러한 로케일
범주는 설치에서 지원하는 모든 값으로 설정할 수 있습니다. 대표적인 값은
en_GB.UTF-8 UTF-8로 인코딩된 영국 영어의 경우.
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 LC_CTYPE 환경 변수는 문자 분류를 지정합니다. GCC는 이를 사용하여
문자열의 문자 경계를 결정합니다. 이것은 일부 멀티 바이트에 필요합니다.
따옴표 및 이스케이프 문자를 포함하는 인코딩은 그렇지 않으면 로 해석됩니다.
문자열 끝 또는 이스케이프.
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 LC_메시지 환경 변수는 진단에 사용할 언어를 지정합니다.
메시지.
경우 LC_ALL 환경 변수가 설정되면 값을 재정의합니다. LC_CTYPE and
LC_메시지; 그렇지 않으면, LC_CTYPE and LC_메시지 기본값으로 랑
환경 변수. 이러한 변수가 설정되지 않은 경우 GCC는 기본적으로 기존
C 영어 행동.
TMPDIR
If TMPDIR 설정되면 임시 파일에 사용할 디렉토리를 지정합니다. GCC 사용
다음으로 사용될 컴파일의 한 단계의 출력을 보관하는 임시 파일
다음 단계로의 입력: 예를 들어 전처리기의 출력
컴파일러에 적절한 입력.
GCC_COMPARE_DEBUG
환경 GCC_COMPARE_DEBUG 합격과 거의 같다 -fcompare-디버그 부터
컴파일러 드라이버. 자세한 내용은 이 옵션의 설명서를 참조하십시오.
GCC_EXEC_PREFIX
If GCC_EXEC_PREFIX 가 설정되면 이름에 사용할 접두사를 지정합니다.
컴파일러에 의해 실행되는 서브 프로그램. 이 접두어가 결합되면 슬래시가 추가되지 않습니다.
하위 프로그램의 이름을 사용하지만 다음과 같은 경우 슬래시로 끝나는 접두사를 지정할 수 있습니다.
당신이 원하는.
If GCC_EXEC_PREFIX 설정되지 않은 경우 GCC는 사용할 적절한 접두사를 파악하려고 시도합니다.
호출되는 경로 이름을 기반으로 합니다.
GCC가 지정된 접두사를 사용하여 하위 프로그램을 찾을 수 없으면
서브 프로그램의 일반적인 위치.
기본값 GCC_EXEC_PREFIX is 접두사/lib/gcc/ 어디에 접두사 의 접두어입니다
설치된 컴파일러. 많은 경우에 접두사 실행했을 때 "접두사"의 값입니다.
구성 스크립트.
로 지정된 기타 접두사 -B 이 접두사보다 우선합니다.
이 접두사는 다음과 같은 파일을 찾는 데도 사용됩니다. crt0.o 연결하는 데 사용됩니다.
또한, 접두사는 검색할 디렉토리를 찾을 때 특이한 방식으로 사용됩니다.
헤더 파일의 경우. 이름이 일반적으로 시작되는 각 표준 디렉토리에 대해
과 /usr/로컬/lib/gcc (보다 정확하게는 GCC_INCLUDE_DIR), GCC 시도
대체 디렉토리를 생성하기 위해 해당 시작 부분을 지정된 접두사로 대체
이름. 따라서 -푸우/, GCC 검색 푸/바 표준을 검색하기 직전
예배 규칙서 /usr/local/lib/바. 표준 디렉토리가 구성된
접두사 다음의 값 접두사 다음으로 대체됩니다. GCC_EXEC_PREFIX 헤더를 찾을 때
파일.
컴파일러_경로
의 가치 컴파일러_경로 콜론으로 구분된 디렉토리 목록입니다. PATH.
GCC는 하위 프로그램을 검색할 때 지정된 디렉토리를 시도합니다.
다음을 사용하여 하위 프로그램 찾기 GCC_EXEC_PREFIX.
라이브러리_경로
의 가치 라이브러리_경로 콜론으로 구분된 디렉토리 목록입니다. PATH.
기본 컴파일러로 구성된 경우 GCC는 다음과 같이 지정된 디렉토리를 시도합니다.
특수 링커 파일 검색, 다음을 사용하여 찾을 수 없는 경우 GCC_EXEC_PREFIX.
GCC를 사용한 링크는 일반 라이브러리를 검색할 때도 이 디렉토리를 사용합니다.
위한 -l 옵션(그러나 다음으로 지정된 디렉토리는 -L 먼저 오세요).
랑
이 변수는 로케일 정보를 컴파일러에 전달하는 데 사용됩니다. 한 가지 방법은
이 정보는 문자를 사용할 때 사용할 문자 집합을 결정하는 데 사용됩니다.
리터럴, 문자열 리터럴 및 주석은 C 및 C++에서 구문 분석됩니다. 컴파일러가
멀티바이트 문자를 허용하도록 구성된 경우 다음 값에 대해 랑 are
인식:
씨지스
JIS 문자를 인식합니다.
씨슈즈
SJIS 문자를 인식합니다.
C-EUCJP
EUCJP 문자를 인식합니다.
If 랑 정의되지 않았거나 다른 값이 있는 경우 컴파일러는 "mblen"을 사용합니다.
멀티바이트를 인식하고 번역하기 위해 기본 로케일에 정의된 "mbtowc" 및 "mbtowc"
자.
일부 추가 환경 변수는 전처리기의 동작에 영향을 줍니다.
cpath
C_INCLUDE_PATH
CPLUS_INCLUDE_PATH
OBJC_INCLUDE_PATH
각 변수의 값은 특수 문자로 구분된 디렉토리 목록입니다.
처럼 PATH, 헤더 파일을 찾을 수 있습니다. 특별한 캐릭터,
"PATH_SEPARATOR"는 대상에 따라 다르며 GCC 빌드 시 결정됩니다. 마이크로소프트
Windows 기반 대상은 세미콜론이며 거의 모든 다른 대상의 경우
콜론.
cpath 지정된 것처럼 검색할 디렉토리 목록을 지정합니다. -I하지만,
주어진 경로 후에 -I 명령줄의 옵션. 이 환경 변수
사전 처리되는 언어에 관계없이 사용됩니다.
나머지 환경 변수는 특정 프로세스를 사전 처리할 때만 적용됩니다.
표시된 언어. 각각은 다음과 같이 검색할 디렉토리 목록을 지정합니다.
로 지정 -아이시스템, 그러나 주어진 경로 후에 -아이시스템 옵션
명령 행.
이 모든 변수에서 빈 요소는 컴파일러에게 현재를 검색하도록 지시합니다.
작업 디렉토리. 빈 요소는 경로의 시작이나 끝에 나타날 수 있습니다. 을위한
예를 들어 값이 cpath ":/special/include"이며, 다음과 같은 효과가 있습니다.
-나는. -나/특별/포함.
DEPENDENCIES_OUTPUT
이 변수가 설정되면 해당 값은 Make 기반의 종속성을 출력하는 방법을 지정합니다.
컴파일러가 처리하는 비시스템 헤더 파일에 시스템 헤더 파일은
종속성 출력에서 무시됩니다.
의 가치 DEPENDENCIES_OUTPUT 파일 이름일 수 있으며 이 경우 Make 규칙
소스 파일 이름에서 대상 이름을 추측하여 해당 파일에 기록됩니다. 아니면 그
값은 형식을 가질 수 있습니다. 파일 목표, 이 경우 규칙이 파일에 기록됩니다. 파일
사용 목표 대상 이름으로.
즉, 이 환경 변수는 옵션을 결합하는 것과 같습니다. -MM
and -MF, 선택 사항 -산 스위치도.
SUNPRO_DEPENDENCIES
이 변수는 다음과 같습니다. DEPENDENCIES_OUTPUT (위 참조), 그 시스템을 제외하고
헤더 파일은 무시되지 않으므로 -M 보다는 -MM. 그러나, 그
기본 입력 파일에 대한 종속성은 생략됩니다.
onworks.net 서비스를 사용하여 온라인으로 mips64el-linux-gnuabi64-gcc-5 사용