점프없이 코드를 직렬로 생성해야한다는 것을 GCC 컴파일러에 알리는 방법.GCC 컴파일러에서 점프없이 코드를 직렬로 생성해야하는 방법
저는 C 소스 코드 (또는 LLVM IR)에 인라인 어셈블리를 포함시키는 프로젝트 작업을하고 있습니다.
내 구현은 실행 파일에 그대로 쓰여지는 인라인 어셈블리 사이의 코드에 달려 있습니다.
공식적으로더, 나는 soure 코드 (C 또는 LLVM IR)가 있다고 가정 : 이제
.label_start: (inserted as inline assembly)
inline_assembly0
source_code0
source_code1
inline_assembly1
...
.label_end: (inserted as inline assembly)
...
을,이 컴파일하지 말아야 등 :
.jmp_target:
source_code1
inline_assembly1
...
.label_end: (inserted as inline assembly)
...
.label_start: (inserted as inline assembly)
inline_assembly0
source_code0
jmp jmp_target
즉, 코드는 .label_start
과 .label_end
순서로 점프하지 않고 레이블 사이에 있어야합니다.
두 개의 인라인 어셈블리 레이블 사이의 모든 것이 재정렬되지 않고 "손상되지 않은"상태를 유지해야한다고 GCC에 알리는 방법이 있습니까? 내 구현은 이것에 달려있다.
이 코드 세그먼트가 루프 내부에 있습니까? –
왜 이것을 필요로합니까? 어쨌든 비 순차적 실행을 저해하지 않는 CPU를 갖추고 있습니까? –
일반적으로 코드는 루프 @BenVoigt 내부에있을 수 있습니다. – Shuzheng