2010-04-23 2 views
2

: 다음과 같은 86를 표현하는 방법SSA 양식을 사용하여 데이터 흐름 분석에서 별칭 레지스터를 처리하는 방법은 무엇입니까? (예를 들어 86에서 EAX/AX/AH/AL) exmaple를 들어

SSA form에서 :

:

xor eax, eax 
inc ax 

일부 의사 기능을 도입함으로써, 내가 가지고 올

[email protected] = [email protected]^[email protected] 
[email protected] = LOWORD([email protected]) 
[email protected] = LOBYTE([email protected]) 
[email protected] = HIBYTE([email protected]) 
[email protected] = HIWORD([email protected]) 

[email protected] = [email protected] + 1 
[email protected] = MAKEDWORD([email protected], HIWORD([email protected])) 
[email protected] = LOBYTE([email protected]) 
[email protected] = HIBYTE([email protected]) 

그러나 나는 그것이 당신의 표기법을 사용

+0

"SSA 양식"이란 무엇을 의미합니까? –

+0

@Eli Bendersky : http://en.wikipedia.org/wiki/Static_single_assignment_form – inv

+0

단순화에 대한 제안은 없지만 이것이 어디에 사용되는지 궁금합니다. 기존 컴파일 된 응용 프로그램을 최적화/변환하려고합니까? ***** 위의 예제를 보면 모든 단계에서 eax, ax, al 및 ah를 동기화하지 않아도됩니다. 예를 들어 다음 명령어가 하나의 경로가 ax이고 다른 하나가 eax를 사용하는 조건부 분기라면 어떻게 될까요? 업데이트 된이 레지스터의 모든 버전을 업데이트하려면 더욱 자세한 정보가 필요합니다! –

답변

2

자세한 너무 많은 생각 :

,691 363,210
  1. EAX @ 0 = ... 그것은이었다 무엇 이건 ... 여기 전에
  2. EAX @ 1 = 0 2 = 도끼

1 + 1 @ EAX는 도끼가 포함되어 있기 때문에 도끼 @

  • 에서 암시 적 단계가있다

      2~3
    1. EAX @ = 0 ...
    2. EAX @ 1 = 0
    3. AX @ 1 = 0 (BE EAX 자체와 배타적 논리합을 취하는 임의의 수 0 ~ EAX이므로 2 = AX 2 단계

    1 + 1 @ 0 죽었 @ 제로)

  • AX @ 경우 원인 도끼 비제 수 없다 그 시점에서 eax @ 1의 이름을 바꿀 수 있습니다 (ebx를 사용하여 이름을 바꿀 수 있으므로 읽을 수 있습니다. 분명히 당신은 가상 레지스터가 아니라 진짜) 사용합니다 :

    1. --- 삭제, EAX 더 이상 관련
    2. EBX @ 0 = 0
    3. BX @ 0 = 0
    4. BX를 @ 1 = BX하면 (즉, 상수 폴딩) 단계 (3)는 상수 함수이기 때문에, 그래서 단계 4 (a 상수와 상수 첨가)로되어 있습니다 함께 두 압축 수

    1 + 0 @

    1. - 삭제, EAX 더 이상
    2. EBX, 당신을 = 0
    3. BX EBX의 상위 16 비트는이 아래 아무것도 지배하지 않는 경우 = 1

    0 @ 0 @ 관련 2 단계도 삭제할 수 있습니다.

  • +2

    맞아. 나는 장황함을 피하려고 노력하고 있지만, SSA의 특징은 장황하다. – inv