KR100947137B1 - 양 엔디안 가능 컴파일러를 구현하기 위한 방법 및 장치 - Google Patents

양 엔디안 가능 컴파일러를 구현하기 위한 방법 및 장치 Download PDF

Info

Publication number
KR100947137B1
KR100947137B1 KR1020077013380A KR20077013380A KR100947137B1 KR 100947137 B1 KR100947137 B1 KR 100947137B1 KR 1020077013380 A KR1020077013380 A KR 1020077013380A KR 20077013380 A KR20077013380 A KR 20077013380A KR 100947137 B1 KR100947137 B1 KR 100947137B1
Authority
KR
South Korea
Prior art keywords
endian
data
code
type
declaration
Prior art date
Application number
KR1020077013380A
Other languages
English (en)
Other versions
KR20070086161A (ko
Inventor
허그 윌킨슨
매튜 애디레타
로버트 쿠시리스
Original Assignee
인텔 코오퍼레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 인텔 코오퍼레이션 filed Critical 인텔 코오퍼레이션
Publication of KR20070086161A publication Critical patent/KR20070086161A/ko
Application granted granted Critical
Publication of KR100947137B1 publication Critical patent/KR100947137B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/436Semantic checking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/52Binary to binary

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

본 발명은 엔디안 유형을 데이터에 지정하는 단계를 포함하는 코드 컴파일 방법에 관한 것이다. 엔디안 플립 동작은 데이터 및 타깃 시스템의 엔디안 유형에 기초하여 수행될 수 있다. 다른 실시예들도 설명되고 청구된다.
양 엔디안(bi-endian), 엔디안 유형(endian type), 엔디안 플립(endian flip), 컴파일러

Description

양 엔디안 가능 컴파일러를 구현하기 위한 방법 및 장치{METHOD AND APPARATUS FOR IMPLEMENTING A BI-ENDIAN CAPABLE COMPILER}
본 발명의 실시예는 컴파일러에 관한 것이다. 좀 더 구체적으로, 본 발명의 실시예는 양 엔디안 가능 컴파일러(bi-endian capable compiler)를 구현하기 위한 방법 및 장치에 관한 것이다.
바이트 엔디안(byte endianess)은 데이터 저장 및 검색(retrieval) 속성으로 여기서 데이터 저장 및 데이터 검색은 복수의 액세스 크기를 지원한다. 더 세밀한 입상(finer granularity)으로 프로그래머는 더 큰 액세스들이 바이트들을 메모리에 저장하는 순서를 본다. 빅 엔디안(big endian) 데이터는 리틀 엔디안(little endian) 데이터와는 반대 바이트 순서로 메모리에 저장된다. 리틀 엔디안 데이터는 최하위 바이트가 최하위 메모리 바이트 어드레스에 저장된다(왼쪽에서 오른쪽으로 저장). 빅 엔디안 데이터는 최상위 바이트가 최하위 메모리 바이트 어드레스에 저장된다(오른쪽에서 왼쪽으로 저장). 동일한 값을 가지는 빅 및 리틀 엔디안 변수들은 CPU 레지스터에서 동일하지만, 메모리에서 순서가 다르다.
하나의 바이트 엔디안 방식(convention)을 이용하여 쓰여진 소스 코드는 이 데이터의 일부가 메모리에 저장되는 방식의 순서 차이를 인식하지 않고서는 또 다 른 바이트 엔디안 방식으로 된 플랫폼(platform) 또는 타깃 시스템 상에서 수행될 수 없다. 예를 들어, 정확한 소프트웨어 동작을 유지하기 위해, 데이터 내의 엔디안 바이트 순서(ordering)는 합집합(union) 또는 포인터 액세스(pointer access)가 이러한 순서를 프로그래머에게 보이게 하는 경우 보존되어야 한다. 프로그램의 범위 밖으로부터 읽혀지거나 쓰여진 데이터에 대한 바이트 순서도 보존되어야 한다.
과거에는, 일부 플랫폼들은 하나의 바이트 엔디안 방식 또는 다른 방식으로 쓰여진 소스 코드의 실행을 지원하도록 설정될 수 있는 모드 비트(mode bit)로 구성되었다. 그러나, 이 방법은 플랫폼 상에서 실행되는 모든 코드를 지원하는데 적용되었고, 따라서 리틀 엔디안 오퍼레이팅 시스템 상에서 빅 엔디안 프로그램을 실행하는 문제에 대처하지 못했다.
따라서, 하나의 엔디안 방식으로 쓰여진 코드를 다른 엔디안 방식의 컴퓨터 시스템 플랫폼 상에서 실행시키기 위한 효율적이고 효과적인 방법 및 장치가 필요하다.
본 발명은 엔디안 유형을 데이터에 지정하는 단계를 포함하는 코드 컴파일 방법에 관한 것이다. 코드를 컴파일하는 방법은 엔디안 유형(endian type)을 데이터에 지정하는 단계, 및 데이터 및 타깃 시스템(target system)의 엔디안 유형에 기초하여 엔디안 플립 동작(endian flip operation)을 수행하는 단계를 포함한다.
본 발명의 실시예의 특징 및 장점들은 예시로서 도시된 것이지 본 발명의 실 시예의 범위를 도시된 특정 실시예에 제한시키도록 되어 있는 것이 아니다.
도 1은 본 발명의 일 실시예가 구현될 수 있는 예시적인 컴퓨터 시스템의 블록 다이어그램.
도 2는 본 발명의 일 실시예에 따라 양 엔디안(bi-endian) 가능 컴파일러를 도시하는 블록 다이어그램.
도 3은 본 발명의 일 실시예에 따라 코드를 컴파일하는 경우 양 엔디안 지원을 촉진하는 방법의 흐름도.
도 4는 본 발명의 일 실시예에 따라 암시적 선언(implicit declarations)을 이용하여 엔디안 유형을 데이터에 지정하는 방법의 흐름도.
도 5는 본 발명의 일 실시예에 따라 명시적 선언(explicit declarations)을 이용하여 엔디안 유형을 데이터에 지정하는 방법의 흐름도.
도 6은 본 발명의 일 실시예에 따라 암시적 및 명시적 선언을 이용하여 엔디안 유형을 데이터에 지정하는 방법의 흐름도.
도 7은 본 발명의 일 실시예에 따라 암시적 선언을 이용하여 엔디안 유형을 데이터에 관련시키는 예를 도시한 도면.
아래의 명세서에서, 설명을 위해, 본 발명의 실시예들의 완전한 이해를 돕기 위해 특정 명명법이 설명된다. 그러나 당업자들이 본 발명의 실시예들을 행하는데 있어서 본 명세서의 특정 상세한 내용들이 필요하지 않을 수 있다. 다른 예에서, 공지의 구성요소들, 프로그램, 및 절차들은 본 발명의 실시예들을 불필요하게 모호 하게 하는 것을 막기 위해 블록 다이어그램 형태로 도시된다.
도 1은 본 발명의 일 실시예에 따라 예시적인 컴퓨터 시스템(100)의 블록 다이어그램이다. 컴퓨터 시스템(100)은 데이터 신호들을 처리하는 프로세서(101) 및 메모리(113)를 포함한다. 컴퓨터 시스템(100)은 빅 엔디안 또는 리틀 엔디안 유형이 될 수 있고 여기서 프로세서(101)는 최하위 어드레스에 숫자의 낮은 자리(low-order) 바이트를 저장하고 최상위 어드레스에 숫자의 높은 자리(high-order) 바이트를 저장하거나(리틀 엔디안 방식) 또는 최하위 어드레스에 숫자의 높은 자리 바이트를 저장하고 최상위 어드레스에 숫자의 낮은 자리 바이트를 저장한다(빅 엔디안 방식).
프로세서(101)는 복합 명령 집합 컴퓨터(complex instruction set computer) 마이크로프로세서, 축소 명령 집합 컴퓨터(reduced instruction set computer) 마이크로프로세서, 훨씬 긴 명령어(very long instruction word) 마이크로프로세서, 명령 집합의 조합을 구현하는 프로세서, 또는 다른 프로세서 장치가 될 수 있다. 도 1은 단일 프로세서를 가지는 컴퓨터 시스템(100)을 도시한다. 그러나, 컴퓨터 시스템(100)은 복수의 프로세서들로 동작할 수 있다. 추가적으로, 하나 이상의 프로세서 각각은 하나 이상의 하드웨어 스레드(thread)를 지원할 수 있다. 프로세서(101)는 프로세서(101) 및 컴퓨터 시스템(100) 내의 다른 구성요소들 사이에서 데이터 신호들을 송신하는 CPU 버스(110)에 결합된다.
메모리(113)는 동적 랜덤 액세스 메모리 장치, 정적 랜덤 액세스 메모리 장치, 리드 온니 메모리 및/또는 다른 메모리 장치가 될 수 있다. 메모리(113)는 프 로세서(101)에 의해 실행될 수 있는 데이터 신호들에 의해 표현되는 명령어 및 코드를 저장할 수 있다. 컴퓨터 시스템(100)의 일 실시예에 따라, 양 엔디안 가능 컴파일러는 메모리(113)에 저장되고 컴퓨터 시스템(100) 내의 프로세서(101)에 의해 구현되어 소프트웨어를 컴파일하는 경우 양 엔디안 지원을 제공한다. 통상적으로 리틀 엔디안 순서로 메모리(113)에 저장될 수 있는 데이터는, 저장하기 전에 엔디안 플립(바이트 교체) 동작(endian flip operation)을 수행하여, 빅 엔디안 순서로 저장될 수 있고, 그 반대도 성립할 수 있다. 이 값은 메모리(113)로부터 검색 후에 엔디안 플립 동작을 수행함으로써 회복될 수 있다. 엔디안 플립 동작은 데이터를 쓰기 전(프리 라이트(pre-write)) 및 데이터를 읽은 후(포스트-리드(post-read))에 정렬된 및 정렬되지 않은 기준에 대해 수행될 수 있다. 엔디안 플립 동작은 개별 명령어, 개별 기계 동작, 또는 특정 로드나 저장 동작의 부작용을 이용하여 구현될 수 있다.
메모리(113)에 저장된 데이터 신호들을 저장하는 캐시 메모리(102)는 프로세서(101) 내에 위치한다. 캐시(102)는 액세스의 집약성(locality)을 이용하여 프로세서(101)에 의한 메모리로의 액세스를 빠르게 한다. 컴퓨터 시스템(100)의 대안 실시예에서, 캐시(102)는 프로세서(101) 밖에 위치한다. 브리지 메모리 제어기(bridge memory controller, 111)는 CPU 버스(110) 및 메모리(113)에 결합된다. 브리지 메모리 제어기(111)는 프로세서(101), 메모리(113) 및 컴퓨터 시스템(100) 내의 다른 구성요소들 사이에서 데이터 신호를 조종하고(direct) CPU 버스(110), 메모리(113) 및 제1 IO 버스(120) 사이의 데이터 신호를 브리지한다.
제1 IO 버스(120)는 단일 버스 또는 복수 버스들의 조합이 될 수 있다. 제1 IO 버스(120)는 컴퓨터 시스템(100) 내의 구성요소들 사이의 통신 링크를 제공한다. 네트워크 제어기(121)가 제1 IO 버스(120)에 결합되어 있다. 네트워크 제어기(121)는 컴퓨터 시스템(100)을 컴퓨터들의 네트워크(도시되지 않음)에 링크시키고 기계들(machines) 사이의 통신을 지원할 수 있다. 디스플레이 장치 제어기(122)가 제1 IO 버스(120)에 결합되어 있다. 디스플레이 장치 제어기(122)는 컴퓨터 시스템(100)에 디스플레이 장치(도시되지 않음)를 결합시키도록 하고 디스플레이 장치 및 컴퓨터 시스템(100) 사이의 인터페이스로서 동작한다.
제2 IO 버스(130)는 단일 버스 또는 복수의 버스들의 조합이 될 수 있다. 제2 IO 버스(130)는 컴퓨터 시스템(100) 내의 구성요소들 사이의 통신 링크를 제공한다. 데이터 기억 장치(131)가 제2 IO 버스(130)에 결합되어 있다. 데이터 기억 장치(131)는 하드 디스크 드라이브, 플로피 디스크 드라이브, CD-ROM 드라이브, 플래시 메모리 장치 또는 다른 대용량 기억 장치가 될 수 있다. 입력 인터페이스(132)가 제2 IO 버스(130)에 결합되어 있다. 입력 인터페이스(132)는 예컨대, 키보드 및/또는 마우스 제어기 또는 다른 입력 인터페이스가 될 수 있다. 입력 인터페이스(132)는 전용 장치(dedicated device)가 될 수 있거나 버스 제어기 또는 다른 제어기와 같은 또 다른 장치에 위치할 수 있다. 입력 인터페이스(132)는 입력 장치를 컴퓨터 시스템(100)에 결합시키고 입력 장치로부터 컴퓨터 시스템(100)으로 데이터 신호를 송신한다. 오디오 제어기(133)가 제2 IO 버스(130)에 결합되어 있다. 오디오 제어기(133)는 소리의 녹음 및 재생을 조정하도록 동작하고 IO 버스(130)에 또한 결합되어 있다. 버스 브리지(123)는 제1 IO 버스(120)를 제2 IO 버스(130)에 결합시킨다. 버스 브리지(123)는 제1 IO 버스(120) 및 제2 IO 버스(130) 사이의 데이터 신호를 버퍼링하고 브리지하도록 동작한다.
도 2는 본 발명의 일 실시예에 따라 양 엔디안 가능 컴파일러(200)를 도시한 블록 다이어그램이다. 양 엔디안 가능 컴파일러(200)는 컴파일러 관리자(210)를 포함한다. 컴파일러 관리자(210)는 컴파일할 소스 코드를 수신한다. 컴파일러 관리자(210)는 양 엔디안 가능 컴파일러(200) 내의 다른 구성요소들 사이에서 정보를 송신하고 인터페이스한다.
양 엔디안 가능 컴파일러(200)는 전단 장치(front end unit, 220)를 포함한다. 양 엔디안 컴파일러(200)의 일 실시예에 따라, 전단 장치(220)는 소스 코드를 분석하고 이를 추상 구문 트리(abstract syntax tree)로 변환한다. 전단 장치(220)는 또한 엔디안 유형을 소스 코드 내의 데이터에 지정할 수 있다. 전단 장치(220)의 제1 실시예에 따라, 소스 코드가 기인하는 파일의 특성은 관련 엔디안 유형을 가질 수 있는 암시적 선언 기준(implicit declaration criteria)과 비교된다. 암시적 선언 기준은, 예컨대, 경로 이름(path name) 또는 디렉토리와 같은, 소스 코드가 기인한 파일의 위치를 포함할 수 있다. 암시적 선언 기준은 또한 디렉토리 내의 파일의 특성, 또는 다른 정보를 포함할 수 있다. 이 실시예에서, 전단 장치(220)는 암시적 선언 기준과 관련된 엔디안(endianess)에 기초하여 소스 코드 내의 데이터에 엔디안 유형을 지정할 수 있다. 전단 장치(220)의 제2 실시예에 따라, 소스 코드 내의 데이터는 선언 내의 엔디안 유형과 관련될 수 있다. 이 실 시예에서, 전단 장치(220)는 선언 내의 관련 엔디안 유형에 기초하여 엔디안 유형을 데이터에 지정한다. 전단 장치(220)는 데이터로의 엔디안 유형의 명시적 선언이 암시적 선언 기준과 관련된 엔디안에 대해 우선 순위를 가질 수 있는 두 실시예들을 구현할 수 있다. 소스 코드 내의 데이터는 베이스 데이터 유형(base data types) 뿐만 아니라 데이터 구조 및 합집합(union)과 같은 집합을 포함할 수 있다.
양 엔디안 가능 컴파일러(200)는 중간 언어 장치(intermediate language unit, 230)를 포함한다. 중간 언어 장치(230)는 추상 구문 트리를 중간 표현(intermediate representation)과 같은 공통 중간 형태(common intermediate form)로 변환시킨다. 양 엔디안 가능 컴파일러(200)는 중간 표현 내의 엔디안 플립 동작을 수행하기 위한 위치를 결정하고 이 위치에 엔디안 플립 오퍼레이터를 위치시킨다. 양 엔디안 가능 컴파일러(200)의 일 실시예에 따라 데이터의 엔디안 유형이 타깃 또는 플랫폼 시스템의 엔디안 유형과 다른 경우, 데이터를 메모리에 쓰기 전 및 타깃 또는 플랫폼 시스템의 메모리로부터 데이터를 읽은 후에 엔디안 플립이 수행된다. 중간 언어 장치(230)는 추상 구문 트리를 하나 이상의 공통 중간 형태로 변환시킬 수 있다.
양 엔디안 가능 컴파일러(200)는 최적화 장치(240)를 포함한다. 최적화 장치(240)는 공통 부분식 삭제(common sub-expression elimination: CSE) 장치(241)를 포함한다. CSE 장치(241)는 중복 엔디안 플립 동작들을 제거하고 데이터에 대한 값이 변경되지 않았다고 결정되었을 경우 중간 표현을 간단하게 한다. 최적화 장치(240)는 코드 이동 장치(code motion unit, 242)를 포함한다. 코드 이동 장 치(242)는 성능 관점에서 엔디안 플립 동작을 실행하는 것이 보다 효율적일 수 있는 경우 엔디안 플립 동작을 명령 스트림(instruction stream)의 앞 부분(ealier portion)으로 이동시킨다. 최적화 장치(240)는 일정 전달 장치(constant propagation unit, 243)를 포함한다. 일정 전달 분석으로부터 데이터에 대한 값이 변경되지 않았고 따라서 메모리 읽기가 불필요하다고 결정된 경우 일정 전달 장치(243)는 일정하게 엔디안 플립 동작을 제거한다.
양 엔디안 컴파일러(200)는 코드 발생기(250)를 포함한다. 코드 발생기(250)는 중간 표현을 기계 코드(machine code)로 전환한다. 양 엔디안 컴파일러(200)의 일 실시예에 따라, 코드 발생기(250)는 기계 명령들을 삽입하여 엔디안 플립 동작들을 구현한다. 일 실시예에서, 하나 이상의 BSWAP 및/또는 시프트 명령들은 엔디안 플립 동작들을 구현하는데 사용된다.
양 엔디안 컴파일러(200)의 실시예에 따라, 빅 엔디안 데이터에 대한 동작들은 아래에 예에서 나타난 바와 같이 분석될 수 있다.
extern int x;
extern short y;
x++;
y++;
는 아래와 같이 해석된다:
; x++
MOV EAX, x
BSWAP EAX
INC EAX
BSWAP EAX
MOV x, EAX
; y++
MOV AX, y
BSWAP EAX
SHR EAX, 16
INC EAX
BSWAP EAX
SHR EAX, 16
MOV y, AX
양 엔디안 컴파일러(200)는 레지스터 할당기(register allocator, 260)를 포함한다. 레지스터 할당기(260)는 메모리 보다는 프로세서 내의 레지스터에 저장될 수 있는 중간 표현의 데이터를 식별한다. 레지스터 할당기(260)는 레지스터를 컴퓨터 시스템의 엔디안 유형으로 된 데이터에 할당한다.
도 3은 본 발명의 일 실시예에 따라 코드를 컴파일하는 경우 양 엔디안 지원을 촉진하는 방법의 흐름도이다. 단계(301)에서, 엔디안 유형이 데이터에 지정된다. 엔디안 유형은 암시적 선언, 명시적 선언, 또는 암시적 및 명시적 선언의 조합을 통해 데이터에 지정될 수 있다.
단계(302)에서, 데이터가 한 엔디안 유형에서 다른 엔디안 유형으로 변환되어야 하는지 결정된다. 본 발명의 일 실시예에 따라, 데이터의 엔디안 유형이 타깃 또는 플랫폼 시스템의 엔디안 유형과 다른 경우, 데이터를 메모리에 쓰기 전 및 타깃 또는 플랫폼 시스템의 메모리로부터 데이터를 읽은 후에 엔디안 플립이 실행된다. 엔디안 플립 오퍼레이터는 중간 언어(intermediate language)의 위치에 위치할 수 있고, 여기서 엔디안 플립 동작이 실행될지 결정된다.
본 발명의 일 실시예에 따라, 엔디안 플립은 빅 및 리틀 엔디안 표현 사이의 가능한 의미 차이(semantic difference)가 있는 데이터에 대해서만 삽입될 수 있다. 이것은 예컨대 컴파일러에 의해 결정될 수 있다. 일 실시예에서, 외부, 휘발성, 또는 합집합의 부분이 아니고, 코드에 의해 명확히 참조되는 자신의 어드레스를 가지지 않는 데이터 변수들은 프로그램에 임의의 의미 효과(semantic effect) 없이 양 표현 중 하나로 저장된다. 추가적인 분석이 엔디안 플립이 필요한 변수 부류를 더 줄이도록 수행될 수 있다. 엔디안 플립은 소스 및 목적지가 동일한 엔디안 유형인 경우 및 동작이 엔디안 표현이 문제되지 않는 경우, 즉 비트 이진 동작(and, or, xor, not)인 경우 제거될 수 있다.
단계(303)에서, 엔디안 플립의 최적화가 실행된다. 최적화는 코드를 실행하는 경우 프로세서 사이클을 줄이기 위해 엔디안 플립 동작을 이동시키거나(moving) 제거하는 것을 수반할 수 있다. 본 발명의 일 실시예에 따라, 최적화는, 데이터 값이 변하지 않았다고 결정된 경우 중복 엔디안 플립 동작을 제거하거나, 성능 면에서 더 효율적 경우 엔디안 플립 동작을 명령 스트림의 앞(earlier) 혹은 뒤(later) 부분으로 이동시키거나, 다른 절차들을 수행하는 것을 수반할 수 있다.
단계(304)에서, 기계 명령들은 기계 코드에 삽입되어 엔디안 플립 동작을 구현한다. 엔디안 플립 동작이 빅 엔디안 데이터 및 리틀 엔디안 데이터 사이의 변환을 지원하도록 바이트를 플립하는 본 발명의 일 실시예에 따라, 하나 이상의 BSWAP 및/또는 시프트 명령이 사용될 수 있다.
단계(305)에서, 레지스터 할당이 수행된다. 본 발명의 일 실시예에 따라, 중간 표현의 데이터는 메모리보다는 프로세서 내의 레지스터에 저장되도록 식별된다.
도 4는 본 발명의 일 실시예에 따라 암시적 선언을 이용하여 데이터에 엔디안 유형을 지정하는 방법의 흐름도이다. 도 4에 나타난 방법은 도 3에 나타난 바와 같이 단계(301)에서 구현될 수 있다. 단계(401)에서, 컴파일될 코드의 파일 특성은 암시적 선언 기준과 비교된다. 암시적 선언 기준은 예컨대, 파일 경로 또는 디렉토리 이름과 같은 파일의 위치, 디렉토리 내의 또 다른 파일의 특성, 또는 다른 기준을 포함할 수 있다. 암시적 선언 기준은 이와 관련된 엔디안 유형을 가질 수 있다.
단계(402)에서, 코드 내의 모든 데이터에 대한 전역 플래그(global flag)가 단계(401)에서의 비교에 기초하여 설정된다. 본 발명의 일 실시예에 따라, 전역 플래그는 코드 내의 모든 데이터에 관련된 엔디안 유형을 표시하는 표시자(indicator)가 될 수 있다.
단계(403)에서, 코드 내의 데이터가 분석되고 전역 플래그가 코드 내의 데이 터에 지정된다.
도 4에 나타난 바와 같이 암시적 선언은 제1 엔디안 유형을 활용하는 제1 타깃 또는 플랫폼 시스템 상에 쓰여진 소프트웨어가 소스 코드에 대한 수정 없이 제2 엔디안 유형을 활용하는 제2 타깃 또는 플랫폼 시스템 상에서 컴파일, 링크, 또는 디버깅될 수 있도록 한다. 도 4에 나타난 실시예는 양 엔디안 가능 컴파일러로 하여금 베이스 데이터 바이트를 지시하는 빅 및 리틀 엔디안 바이트 모두를 지원하도록 한다. 예를 들어, 만약 암시적 선언 기준이 엔디안 유형과 관련된 경로 이름이면, 경로 이름을 가지는 디렉토리 내의 모든 소스 파일들은 관련 엔디안 유형으로 컴파일 될 것이다. 다른 암시적 선언 기준이 구현될 수 있다. 예를 들어, 컴파일될 파일로서 동일한 디렉토리를 공유하는 파일 이름이 엔디안 유형을 관련(associate)시키도록 사용될 수 있다. 본 발명의 일 실시예에 따라, 암시적 선언 기준을 엔디안 유형에 관련시키는 것(association)은 호출에 대한 컴파일러로의 명령을 이용하여 이루어질 수 있다. 본 발명의 일 실시예에 따라, 소스 파일 또는 헤더 파일의 포함 전에 엔디안 모드를 설정하고 포함 후에 엔디안 모드를 리셋하는 파일은 자동으로 결합(association)에 포함될 수 있다. 결합을 위한 다른 절차들도 사용될 수 있다.
도 5는 본 발명의 일 실시예에 따라 명시적 선언을 이용하여 데이터에 엔디안 유형을 지정하는 방법의 흐름도이다. 도 5에 나타난 방법은 도 3에 나타난 단계(301)에서 구현될 수 있다. 단계(501)에서, 컴파일될 코드 내의 데이터가 분석된다.
단계(502)에서 엔디안 유형이 데이터와 관련되는지 결정된다. 본 발명의 일 실시예에 따라, 데이터의 선언은 유형 특정자(type specifier), 속성 권한자(attribute qualifier), 또는 데이터와 관련되는 엔디안을 표시할 수 있는 다른 라벨들에 대해 체크된다. 만약 엔디안 유형이 데이터와 관련되지 않는다고 결정되면, 제어는 단계(503)로 진행한다. 만약 엔디안 유형이 데이터와 관련된다고 결정되면, 제어는 단계(504)로 진행한다.
단계(503)에서, 디폴트 엔디안 유형(default endian type)을 표시하는 플래그가 데이터에 지정된다. 본 발명의 일 실시예에 따라, 코드가 기원하는 플랫폼 시스템에 대응하는 엔디안 유형, 코드가 실행될 플랫폼 시스템에 대응하는 엔디안 유형, 또는 다른 엔디안 유형을 표시하도록 플래그가 데이터에 지정된다.
단계(504)에서, 선언 내의 데이터와 관련된 엔디안 유형을 표시하도록 플래그가 데이터에 지정된다.
도 5에 나타난 명시적 선언은 컴파일러로 하여금 소스 코드로의 명시적 변경으로 빅 및 리틀 엔디안 유형을 동시에 지원하고 다루도록 한다. 양 엔디안 지원은 빅 엔디안 소프트웨어 및 리틀 엔디안 소프트웨어의 통합(integration)을 가능하게 한다. 정수, 포인터, 부동(float), 및 비트 필드와 같은 베이스 데이터 유형의 예는 자신의 엔디안에 관하여 유형 특정자, 속성 권한자, 또는 다른 라벨링 기술에 의해 명시적으로 권한을 부여받을 것이다. 명시적 선언이 없는 경우, 베이스 데이터 유형의 엔디안이 컴파일러 또는 다른 구성요소의 디폴트가 될 수 있다. 명시적 선언의 예는 아래와 같이 나타난다.
__big endian int i; /*빅 엔디안 정수*/
int* __bigendian p; /*디폴트 정수로의 빅 엔디안 포인터*/
struct {__littleendian int a; __bigendian int b} c; /*양 엔디안 구조*/
union {__little endian int 1;__bigendian int b} d; /*양 엔디안 합집합*/
int il __atribute __((bigendian)) /* 명시적으로 엔디안 속성을 선언하는 대체 방법*/
도 6은 본 발명의 일 실시예에 따라 암시적 및 명시적 선언을 이용하여 엔디안 유형을 데이터에 지정하는 방법의 흐름도이다. 도 6에 나타난 방법은 도 3에 나타난 단계(301)에서 구현될 수 있다. 단계(601)에서, 컴파일될 코드의 파일 특성이 암시적 선언 기준과 비교된다. 암시적 선언 기준은 예컨대, 파일 경로 또는 디렉토리 이름과 같은 파일의 위치, 또는 디렉토리 내의 또 다른 파일의 특성을 포함할 수 있다. 암시적 선언 데이터는 자신과 관련된 엔디안 유형을 가질 수 있다.
단계(602)에서, 단계(601)에서 설명된 비교에 기초하여 전역 플래그가 설정된다. 본 발명의 일 실시예에 따라, 전역 플래그는 코드 내의 모든 데이터와 관련된 엔디안 유형을 표시하는 표시자가 될 수 있다.
단계(603)에서, 코드 내의 데이터가 분석된다.
단계(604)에서, 엔디안 유형이 데이터와 관련되는지 결정된다. 본 발명의 일 실시예에 따라, 데이터의 선언은 유형 특정자(type specifier), 속성 권한자(attribute qualifier), 또는 데이터와 관련되는 엔디안을 표시할 수 있는 다른 라벨들에 대해 체크된다. 만약 엔디안 유형이 데이터와 관련되지 않는다고 결정되 면, 제어는 단계(605)로 진행한다. 만약 엔디안 유형이 데이터와 관련된다고 결정되면, 제어는 단계(606)로 진행한다.
단계(605)에서, 전역 플래그는 코드 내의 데이터에 지정된다.
단계(606)에서, 선언 내의 데이터와 관련된 엔디안 유형을 표시하도록 플래그가 데이터에 지정된다. 엔디안 유형이 명시적으로 결정되었다고 표시하도록 제2 플래그가 또한 데이터에 지정될 수 있다.
도 3에서 도 6은 본 발명의 실시예에 따라 방법을 도시하는 흐름도이다. 이 도면들에 도시된 기술 및 절차의 일부는 순차적으로나, 병렬로나, 또는 설명된 방법과는 다른 순서로 실행될 수 있다. 실행하는데 있어서 설명된 모든 기술 및 절차가 필요하지는 않고, 추가적인 기술 및 절차가 더해질 수 있으며, 설명된 기술 및 절차의 일부가 다른 기술 및 절차로 대체될 수 있다.
도 7은 본 발명의 일 실시예에 따라 암시적 선언을 이용하여 엔디안 유형을 데이터에 관련시키는 예를 도시한다. 이 예에서, 암시적 선언 기준은 컴파일될 코드의 위치(location)이다. 위치(710)는 빅 엔디안인 파일과 관련된다. 위치(720)는 리틀 엔디안인 파일과 관련된다. 위치(710)는 데이터 구조들 t1be 및 t2be를 정의하는 .h 파일(711)을 포함한다. 이 데이터 구조들 모두는 빅 엔디안 유형 결합(association)을 가지는 위치 내에 있는 .h 파일에서 정의되기 때문에, 데이터 구조 t1be 및 t2be 모두는 빅 엔디안 유형으로 지정된다. 위치(720)는 데이터 구조들 t1le 및 t2le를 정의하는 .h 파일(721)을 포함한다. 이 데이터 구조들 모두는 리틀 엔디안 유형 결합(association)을 가지는 위치 내에 있는 .h 파일에서 정 의되기 때문에, 데이터 구조 t1le 및 t2le 모두는 리틀 엔디안 유형으로 지정된다.
위치(710)는 변수 및 자신의 대응 데이터 구조를 선언하는 .c 파일(712)을 포함한다. 변수 v1 및 v3는 빅 엔디안이다. 변수 v2 및 v4는 리틀 엔디안이다. 위치(720)는 변수 및 자신의 대응 데이터 구조를 선언하는 .c 파일(722)을 포함한다. 변수 v5 및 v7은 리틀 엔디안이다. 변수 v6 및 v8은 빅 엔디안이다.
.c 파일(712)에 관하여, 빅 엔디안인 변수 v1이 리틀 엔디안인 v2로 설정되는 경우, 변수 v2는 리틀 엔디안에서 빅 엔디안으로 변환된다. 빅 엔디안인 변수 v3이 리틀 엔디안인 v4로 설정되는 경우, 변수 v4도 리틀 엔디안에서 빅 엔디안으로 변환된다.
.c 파일(722)에 관하여, 리틀 엔디안인 변수 v5가 빅 엔디안인 v6으로 설정되는 경우, 변수 v6은 빅 엔디안에서 리틀 엔디안으로 변환된다. 리틀 엔디안인 변수 v7이 빅 엔디안인 v8로 설정되는 경우, 변수 v8도 빅 엔디안에서 리틀 엔디안으로 변환된다.
본 발명의 실시예는 명령들을 저장한 기계 판독가능 매체를 포함할 수 있는 컴퓨터 프로그램 제품, 또는 소프트웨어로 제공될 수 있다. 이 기계 판독가능 매체는 컴퓨터 시스템 또는 다른 전자 장치를 프로그램하는데 사용될 수 있다. 기계 판독가능 매체는 플로피 디스켓, 광 디스크, CD-ROM, 및 자기 광 디스크 또는 전자 명령을 저장하기에 적합한 다른 유형의 미디어/기계 판독가능 매체 등을 포함할 수 있다. 본 명세서에서 설명된 기술은 임의의 특정 소프트웨어 구성에 한정되지 않는다. 이 기술은 임의의 연산 또는 처리 환경에서 사용될 수 있다. 본 명세서에 사용된 "기계 판독가능 매체" 용어는 기계에 의해 실행되도록 일련의 명령을 저장하거나 인코딩할 수 있고 기계로 하여금 본 명세서에 기술된 방법들 중 임의를 수행하도록 하는 임의의 매체를 포함할 수 있다. 또한, 소프트웨어를, 조치를 취하거나 결과를 가져오는 점에서 한 형태 또는 또 다른 형태로(예컨대, 프로그램, 절차, 프로세스, 애플리케이션, 모듈, 장치, 로직 등) 말하는 것은 일반적이다. 이러한 표현들은 단지 프로세싱 시스템에 의한 소프트웨어의 실행이 프로세서로 하여금 결과를 가져오기 위한 액션을 수행하도록 하는 것을 속기 방식으로 기술한 것에 불과한다.
상기 설명에서 본 발명의 실시예는 특정 실시예에 관하여 설명되었다. 그러나, 본 발명의 사상 및 범위를 벗어나지 않는 한도 내에서 다양한 수정 및 변경을 가할 수 있다. 따라서, 명세서 및 도면은 제한적이기 보다는 예시적인 것으로 간주되어야 한다.

Claims (28)

  1. 코드를 컴파일하는 방법으로서,
    플래그(flag)를 설정하여, 소스 코드를 중간 표현(intermediate representation)으로 변환하기 전에, 엔디안 유형(endian type)을 상기 소스 코드 내의 데이터에 지정하는 단계;
    상기 소스 코드를 추상 구문 트리(abstract syntax tree)로 변환하는 단계;
    상기 추상 구문 트리를 상기 중간 표현으로 변환하는 단계;
    상기 중간 표현을 기계 코드(machine code)로 변환하는 단계; 및
    기계 명령들을 삽입하여, 상기 기계 명령들이 타깃 시스템(target system)에서의 프로세서에 의해 실행될 때, 상기 타깃 시스템 및 상기 데이터의 엔디안 유형에 기초하여 엔디안 플립 동작(endian flip operation)을 수행하는 단계
    를 포함하는 코드 컴파일 방법.
  2. 제1항에 있어서,
    상기 코드 내의 상기 데이터의 선언(declaration)으로부터 상기 데이터의 엔디안 유형을 결정하는 단계를 더 포함하는 코드 컴파일 방법.
  3. 제1항에 있어서,
    암시적 선언 기준(implicit declaration criteria)에 기초하여 상기 데이터의 엔디안 유형을 결정하는 단계를 더 포함하는 코드 컴파일 방법.
  4. 제3항에 있어서,
    상기 암시적 선언 기준은 상기 코드의 위치(location)를 포함하는 코드 컴파일 방법.
  5. 제3항에 있어서,
    상기 암시적 선언 기준은 상기 코드를 가진 디렉토리 내의 파일의 특성을 포함하는 코드 컴파일 방법.
  6. 제1항에 있어서,
    상기 엔디안 플립 동작을 수행하는 단계는 상기 데이터에 대응하는 바이트들을 교환(swapping)하는 단계를 포함하는 코드 컴파일 방법.
  7. 제6항에 있어서,
    상기 데이터에 대응하는 바이트들을 교환하는 단계는 상기 데이터를 메모리에 쓰기 전 및 상기 메모리로부터 상기 데이터를 읽은 후에 수행되는 코드 컴파일 방법.
  8. 제6항에 있어서,
    상기 바이트들을 교환하는 단계는 기계 코드(machine code)에 하나 이상의 기계 명령(machine instruction)을 삽입하는 단계를 포함하는 코드 컴파일 방법.
  9. 제8항에 있어서,
    상기 하나 이상의 기계 명령은 BSWAP 명령을 포함하는 코드 컴파일 방법.
  10. 제1항에 있어서,
    공통 부분식(common sub-expression)의 존재를 결정 시에 중복 엔디안 플립 동작을 제거하는 단계를 더 포함하는 코드 컴파일 방법.
  11. 제1항에 있어서,
    상기 엔디안 플립 동작을 명령 스트림의 앞 부분(earlier portion)으로 이동시키는 단계를 더 포함하는 코드 컴파일 방법.
  12. 삭제
  13. 삭제
  14. 삭제
  15. 삭제
  16. 삭제
  17. 삭제
  18. 삭제
  19. 플래그를 설정하여, 소스 코드를 중간 표현으로 변환하기 전에, 엔디안 유형을 상기 소스 코드 내의 데이터에 지정하고, 상기 소스 코드를 추상 구문 트리로 변환하기 위한 전단 장치(front end unit); 및
    상기 추상 구문 트리를 상기 중간 표현으로 변환하고, 상기 데이터의 상기 엔디안 유형 및 타깃 시스템의 엔디안 유형에 기초하여 엔디안 플립 동작을 수행할 시기를 결정하기 위한 중간 언어 장치(intermediate language unit); 및
    상기 중간 표현을 기계 코드로 변환하기 위한 코드 발생기
    를 포함하는 컴파일러를 저장하는 컴퓨터 판독가능 매체.
  20. 제19항에 있어서,
    상기 전단 장치는 코드 내의 상기 데이터의 선언으로부터 상기 데이터의 상기 엔디안 유형을 결정하는, 컴파일러를 저장하는 컴퓨터 판독가능 매체.
  21. 제19항에 있어서,
    상기 전단 장치는 암시적 선언 기준에 기초하여 상기 데이터의 상기 엔디안 유형을 결정하는, 컴파일러를 저장하는 컴퓨터 판독가능 매체.
  22. 제19항에 있어서,
    상기 컴파일러는 공통 부분식의 존재를 결정 시에 중복 엔디안 플립 동작 제거하는 최적화 장치(optimizer unit)를 더 포함하는, 컴파일러를 저장하는 컴퓨터 판독가능 매체.
  23. 제19항에 있어서,
    상기 컴파일러는 엔디안 플립 동작을 명령 스트림의 앞 부분으로 이동시키는 최적화 장치를 더 포함하는, 컴파일러를 저장하는 컴퓨터 판독가능 매체.
  24. 제19항에 있어서,
    상기 코드 발생기(code generator)는 상기 엔디안 플립 동작을 가능하게 하도록 하나 이상의 기계 명령들을 삽입하는, 컴파일러를 저장하는 컴퓨터 판독가능 매체.
  25. 메모리; 및
    플래그를 설정하여, 소스 코드를 중간 표현으로 변환하기 전에, 엔디안 유형을 상기 소스 코드 내의 데이터에 지정하고, 상기 소스 코드를 추상 구문 트리로 변환하는 전단 장치, 상기 추상 구문 트리를 상기 중간 표현으로 변환하고, 상기 데이터의 상기 엔디안 유형 및 타깃 시스템의 엔디안 유형에 기초하여 엔디안 플립 동작을 수행하는 시기를 결정하는 중간 언어 장치, 및 상기 중간 표현을 기계 코드로 변환하기 위한 코드 발생기를 가지는 컴파일러를 구현하는 프로세서
    를 포함하는 컴퓨터 시스템.
  26. 제25항에 있어서,
    상기 전단 장치는 코드 내의 상기 데이터의 선언으로부터 상기 데이터의 상기 엔디안 유형을 결정하는 컴퓨터 시스템.
  27. 제25항에 있어서,
    상기 전단 장치는 암시적 선언 기준에 기초하여 상기 데이터의 상기 엔디안 유형을 결정하는 컴퓨터 시스템.
  28. 제25항에 있어서,
    상기 코드 발생기는 상기 엔디안 플립 동작을 가능하게 하도록 하나 이상의 기계 명령을 삽입하는, 컴퓨터 시스템.
KR1020077013380A 2004-12-13 2005-12-09 양 엔디안 가능 컴파일러를 구현하기 위한 방법 및 장치 KR100947137B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/010,490 US7552427B2 (en) 2004-12-13 2004-12-13 Method and apparatus for implementing a bi-endian capable compiler
US11/010,490 2004-12-13

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020097025678A Division KR100962746B1 (ko) 2004-12-13 2005-12-09 양 엔디안 가능 컴파일러를 구현하기 위한 방법 및 장치

Publications (2)

Publication Number Publication Date
KR20070086161A KR20070086161A (ko) 2007-08-27
KR100947137B1 true KR100947137B1 (ko) 2010-03-12

Family

ID=36111788

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020097025678A KR100962746B1 (ko) 2004-12-13 2005-12-09 양 엔디안 가능 컴파일러를 구현하기 위한 방법 및 장치
KR1020077013380A KR100947137B1 (ko) 2004-12-13 2005-12-09 양 엔디안 가능 컴파일러를 구현하기 위한 방법 및 장치

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1020097025678A KR100962746B1 (ko) 2004-12-13 2005-12-09 양 엔디안 가능 컴파일러를 구현하기 위한 방법 및 장치

Country Status (6)

Country Link
US (2) US7552427B2 (ko)
EP (1) EP1846819A1 (ko)
JP (1) JP2008523514A (ko)
KR (2) KR100962746B1 (ko)
CN (1) CN101160564B (ko)
WO (1) WO2006065689A1 (ko)

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7552427B2 (en) * 2004-12-13 2009-06-23 Intel Corporation Method and apparatus for implementing a bi-endian capable compiler
EP2177987A1 (en) * 2008-10-17 2010-04-21 Alcatel Lucent A method for handling different types of data, corresponding device, storage means, and software program therefore
IL196635A0 (en) * 2009-01-21 2009-11-18 Solomon Edlin High current capacity inner leads for semiconductor device
EP2446352A4 (en) * 2009-06-25 2012-11-21 Intel Corp OPTIMIZATION OF CODE USING A BI-ENDIAN COMPILER
JP5050019B2 (ja) * 2009-08-26 2012-10-17 株式会社東芝 ソースコード解析システム
US8578357B2 (en) * 2009-12-21 2013-11-05 Intel Corporation Endian conversion tool
US8661421B2 (en) * 2009-12-21 2014-02-25 Intel Corporation Methods and apparatuses for endian conversion
CN101916235B (zh) * 2010-08-02 2013-09-11 凌阳科技股份有限公司 一种中央处理单元及其存取数据的方法
US20140100841A1 (en) * 2012-10-09 2014-04-10 Apple Inc. Testing a Hardware Emulation Model of a Circuit with Software Checker Routines Designed for an RTL Model of the Circuit
US9898386B2 (en) 2013-10-15 2018-02-20 Nxp Usa, Inc. Detecting byte ordering type errors in software code
US9507595B2 (en) 2014-02-28 2016-11-29 International Business Machines Corporation Execution of multi-byte memory access instruction specifying endian mode that overrides current global endian mode
US20150248345A1 (en) * 2014-03-02 2015-09-03 Ralink Technology Corp. Swap method and Electronic System thereof
CN104049949B (zh) * 2014-05-30 2016-10-05 南阳理工学院 一种面向bswap指令的窥孔优化方法
US9619214B2 (en) 2014-08-13 2017-04-11 International Business Machines Corporation Compiler optimizations for vector instructions
US10169014B2 (en) 2014-12-19 2019-01-01 International Business Machines Corporation Compiler method for generating instructions for vector operations in a multi-endian instruction set
US9588746B2 (en) 2014-12-19 2017-03-07 International Business Machines Corporation Compiler method for generating instructions for vector operations on a multi-endian processor
US9569190B1 (en) * 2015-08-04 2017-02-14 International Business Machines Corporation Compiling source code to reduce run-time execution of vector element reverse operations
US9880821B2 (en) 2015-08-17 2018-01-30 International Business Machines Corporation Compiler optimizations for vector operations that are reformatting-resistant
US9594668B1 (en) 2015-09-04 2017-03-14 International Business Machines Corporation Debugger display of vector register contents after compiler optimizations for vector instructions
CN112835842B (zh) * 2021-03-05 2024-04-30 深圳市汇顶科技股份有限公司 端序处理方法、电路、芯片以及电子终端

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030028866A1 (en) * 1999-08-03 2003-02-06 Dean R. E. Long Interpreter optimization for native endianness
US6578193B1 (en) * 1998-03-24 2003-06-10 Novell, Inc. Endian-neutral loader for interpretive environment
US20040221274A1 (en) * 2003-05-02 2004-11-04 Bross Kevin W. Source-transparent endian translation
KR20060078433A (ko) * 2004-12-31 2006-07-05 엘지전자 주식회사 컴파일러의 메모리 접근코드 생성 방법

Family Cites Families (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0776917B2 (ja) * 1984-12-29 1995-08-16 ソニー株式会社 マイクロコンピユ−タ
GB2229832B (en) * 1989-03-30 1993-04-07 Intel Corp Byte swap instruction for memory format conversion within a microprocessor
JPH04362738A (ja) * 1991-06-10 1992-12-15 Oki Electric Ind Co Ltd 変数管理方法
EP0605882B1 (en) * 1993-01-08 1996-12-11 Nec Corporation Method and apparatus for wet treatment of solid surfaces
US5524256A (en) * 1993-05-07 1996-06-04 Apple Computer, Inc. Method and system for reordering bytes in a data stream
US5687337A (en) * 1995-02-24 1997-11-11 International Business Machines Corporation Mixed-endian computer system
US5928349A (en) * 1995-02-24 1999-07-27 International Business Machines Corporation Mixed-endian computing environment for a conventional bi-endian computer system
US5781763A (en) * 1995-04-07 1998-07-14 International Business Machines Corporation Independent control of DMA and I/O resources for mixed-endian computing systems
US5778406A (en) * 1995-06-30 1998-07-07 Thomson Consumer Electronics, Inc. Apparatus for delivering CPU independent data for little and big endian machines
US5907865A (en) * 1995-08-28 1999-05-25 Motorola, Inc. Method and data processing system for dynamically accessing both big-endian and little-endian storage schemes
DE19535306A1 (de) * 1995-09-22 1997-03-27 Siemens Ag Verfahren zum Konvertieren sich unterscheidender Datenformate
US5828884A (en) * 1996-05-23 1998-10-27 Advanced Micro Devices, Inc. Method for compiling a software program and executing on a system which converts data between different endian formats
WO1997044739A1 (en) * 1996-05-23 1997-11-27 Advanced Micro Devices, Inc. Apparatus for converting data between different endian formats and system and method employing same
US6021275A (en) * 1996-08-05 2000-02-01 General Magic, Inc. Object code structure and method for translation of architecture independent program implementations
US6411395B1 (en) * 1997-07-23 2002-06-25 International Business Machines Corporation Apparatus and method for conversion of data between different formats
EP1119805B8 (en) * 1998-10-10 2006-05-03 Transitive Limited Endian transformation
US6351750B1 (en) * 1998-10-16 2002-02-26 Softbook Press, Inc. Dynamic conversion of byte ordering for use on different processor platforms
US6687262B1 (en) * 2000-02-21 2004-02-03 Hewlett-Packard Development Company, L.P. Distributed MUX scheme for bi-endian rotator circuit
EP1182558A1 (en) * 2000-08-21 2002-02-27 Texas Instruments Incorporated MME descriptor having big/little endian bit to control the transfer data between devices
GB0026363D0 (en) * 2000-10-27 2000-12-13 Sgs Thomson Microelectronics Bi-endian libraries
US7278137B1 (en) * 2001-12-26 2007-10-02 Arc International Methods and apparatus for compiling instructions for a data processor
US7389315B1 (en) * 2002-02-28 2008-06-17 Network Appliance, Inc. System and method for byte swapping file access data structures
US7047383B2 (en) * 2002-07-11 2006-05-16 Intel Corporation Byte swap operation for a 64 bit operand
US6895489B2 (en) * 2002-08-07 2005-05-17 Hewlett-Packard Development Company, L.P. System and method for operating in endian independent mode
US20040045007A1 (en) * 2002-08-30 2004-03-04 Bae Systems Information Electronic Systems Integration, Inc. Object oriented component and framework architecture for signal processing
US20050066146A1 (en) * 2003-09-19 2005-03-24 Intel Corporation Endian conversion
US20050097127A1 (en) * 2003-10-30 2005-05-05 Microsoft Corporation Reordering data between a first predefined order and a second predefined order with secondary hardware
US7552427B2 (en) 2004-12-13 2009-06-23 Intel Corporation Method and apparatus for implementing a bi-endian capable compiler
US7721077B2 (en) * 2006-12-11 2010-05-18 Intel Corporation Performing endian conversion

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6578193B1 (en) * 1998-03-24 2003-06-10 Novell, Inc. Endian-neutral loader for interpretive environment
US20030028866A1 (en) * 1999-08-03 2003-02-06 Dean R. E. Long Interpreter optimization for native endianness
US20040221274A1 (en) * 2003-05-02 2004-11-04 Bross Kevin W. Source-transparent endian translation
KR20060078433A (ko) * 2004-12-31 2006-07-05 엘지전자 주식회사 컴파일러의 메모리 접근코드 생성 방법

Also Published As

Publication number Publication date
US7552427B2 (en) 2009-06-23
KR20100007978A (ko) 2010-01-22
KR20070086161A (ko) 2007-08-27
US20090222800A1 (en) 2009-09-03
US8863103B2 (en) 2014-10-14
EP1846819A1 (en) 2007-10-24
JP2008523514A (ja) 2008-07-03
US20060125663A1 (en) 2006-06-15
WO2006065689A1 (en) 2006-06-22
CN101160564A (zh) 2008-04-09
CN101160564B (zh) 2013-01-02
KR100962746B1 (ko) 2010-06-09

Similar Documents

Publication Publication Date Title
KR100947137B1 (ko) 양 엔디안 가능 컴파일러를 구현하기 위한 방법 및 장치
US6496922B1 (en) Method and apparatus for multiplatform stateless instruction set architecture (ISA) using ISA tags on-the-fly instruction translation
US8181170B2 (en) Unwind information for optimized programs
US5963740A (en) System for monitoring computer system performance
US7752611B2 (en) Speculative code motion for memory latency hiding
US9495136B2 (en) Using aliasing information for dynamic binary optimization
US7596781B2 (en) Register-based instruction optimization for facilitating efficient emulation of an instruction stream
US9092228B2 (en) Systems and methods for software instruction translation from a high-level language to a specialized instruction set
US7730463B2 (en) Efficient generation of SIMD code in presence of multi-threading and other false sharing conditions and in machines having memory protection support
US20080052693A1 (en) Method of simd-ization through data reshaping, padding, and alignment
US20120198427A1 (en) Ensuring Register Availability for Dynamic Binary Optimization
JPH0782441B2 (ja) シミユレーシヨン方法
JP2002527815A (ja) プログラムコード変換方法
US8453131B2 (en) Method and apparatus for ordering code based on critical sections
CN112631657A (zh) 用于字符串处理的字节比较方法以及指令处理装置
US6925636B2 (en) Method and apparatus for refining an alias set of address taken variables
US8661421B2 (en) Methods and apparatuses for endian conversion
JPH0668724B2 (ja) シミユレーシヨン方法
US20030140335A1 (en) Tracking format of registers having multiple content formats in binary translation
CN102360306A (zh) 高级语言代码中循环数据流图提取优化信息处理方法
US20030217356A1 (en) Register allocation for program execution analysis
US20090089768A1 (en) Data management for dynamically compiled software
US20040045018A1 (en) Using address space bridge in postoptimizer to route indirect calls at runtime
JPH0816875B2 (ja) コンピュータ・システムのエミュレーション方法
US20060288338A1 (en) Offset threaded code

Legal Events

Date Code Title Description
A201 Request for examination
AMND Amendment
N231 Notification of change of applicant
E902 Notification of reason for refusal
AMND Amendment
N231 Notification of change of applicant
E601 Decision to refuse application
AMND Amendment
J201 Request for trial against refusal decision
A107 Divisional application of patent
B701 Decision to grant
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20130228

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20140303

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20150227

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20160303

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20170302

Year of fee payment: 8

LAPS Lapse due to unpaid annual fee