는 가끔 인라인에 가장 적합한 후보가 될 것으로 보인다왜 델파이 컴파일러는 어셈블리 함수를 인라인하지 않습니까?
function SeniorBit(Value: LongWord): Integer;
asm
OR EAX,EAX
JZ @@Done
BSR EAX,EAX
INC EAX
@@Done:
end;
처럼 매우 짧은 조립 함수를 작성 :
function SeniorBit(Value: LongWord): Integer; inline;
하지만 델파이 컴파일러는 그것을 허용하지 않습니다. 왜?
업데이트 : ldsandon에
감사, 5.5 년 오래 된 오픈 report on QC이 존재한다. 이 보고서에는 asm 지시문 확장과 같은 몇 가지 제안이 포함되어있어 컴파일러에 대한 asm 인라인을 단순화합니다. 컴파일러에게 프로 시저에 대한 스택 프레임을 생성 할 필요가 없다는 것과 선택적으로 어떤 레지스터 (eax, edx 및 ecx 중)를 보존해야하는지에 대해 말하는 "알몸"지시문을 프로 시저/함수 수준에서 소개하는 것을 선호합니다.
BASM 코드를 사용하여 효율적인 인라이닝 절차를 수행하는 것이 일반적이지 않은 경우 (그리고 unessessary 일 수있는 경우) 가장 중요한 경우 (명시 적으로 선언 된 레지스터 사용이 포함 된 알몸 함수)에 대한 인라이닝을 활성화하는 것이 좋습니다.
결과 (예 : ... : Integer; register;) 다음에 레지스터 호출 규칙을 추가하여 컴파일하는 동안 다른 호출 규칙이 사용될 때 함수가 작동하는지 확인해야합니다. –
컴파일러가 인라인 어셈블러 기능을 지원할 미래의 가능성에 대해 토론하고 싶다면 QC 또는 게시판이 가장 적합한 방법 일 것입니다. 나는 순간적으로 asm 블록을 가진 함수를 인라인 할 수 없다는 대답을 시도했다. 당신은 그것이 좋은 생각이라고 생각할지도 모릅니다. (헤이, 저는 집회가 좋고 좋을 것이라고 생각합니다.) 하지만 컴파일러에 대한 기능 요청을 논의 할 수있는 곳은 무엇입니까 ?? 나는 네가 당면한 문제에 대한 답을 원한다고 생각했다. 왜 내가 이것을 인라인 할 수 없는지. –
@Ritsaert Hornstra : 왜 SO가 컴파일러의 기능 요청을 논의 할 곳이 아니라고 생각합니까? 그것은 분명히 프로그래밍 질문이며, 최선의 방법으로 구현하는 방법과 [아직 수사학적인 질문 인] 왜 그 일이 아직 구현되지 않은가에 대한 해답이되어야합니다. – kludg