KR100947137B1 - 양 엔디안 가능 컴파일러를 구현하기 위한 방법 및 장치 - Google Patents
양 엔디안 가능 컴파일러를 구현하기 위한 방법 및 장치 Download PDFInfo
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/436—Semantic checking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/52—Binary 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
본 발명의 실시예는 컴파일러에 관한 것이다. 좀 더 구체적으로, 본 발명의 실시예는 양 엔디안 가능 컴파일러(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)
- 코드를 컴파일하는 방법으로서,플래그(flag)를 설정하여, 소스 코드를 중간 표현(intermediate representation)으로 변환하기 전에, 엔디안 유형(endian type)을 상기 소스 코드 내의 데이터에 지정하는 단계;상기 소스 코드를 추상 구문 트리(abstract syntax tree)로 변환하는 단계;상기 추상 구문 트리를 상기 중간 표현으로 변환하는 단계;상기 중간 표현을 기계 코드(machine code)로 변환하는 단계; 및기계 명령들을 삽입하여, 상기 기계 명령들이 타깃 시스템(target system)에서의 프로세서에 의해 실행될 때, 상기 타깃 시스템 및 상기 데이터의 엔디안 유형에 기초하여 엔디안 플립 동작(endian flip operation)을 수행하는 단계를 포함하는 코드 컴파일 방법.
- 제1항에 있어서,상기 코드 내의 상기 데이터의 선언(declaration)으로부터 상기 데이터의 엔디안 유형을 결정하는 단계를 더 포함하는 코드 컴파일 방법.
- 제1항에 있어서,암시적 선언 기준(implicit declaration criteria)에 기초하여 상기 데이터의 엔디안 유형을 결정하는 단계를 더 포함하는 코드 컴파일 방법.
- 제3항에 있어서,상기 암시적 선언 기준은 상기 코드의 위치(location)를 포함하는 코드 컴파일 방법.
- 제3항에 있어서,상기 암시적 선언 기준은 상기 코드를 가진 디렉토리 내의 파일의 특성을 포함하는 코드 컴파일 방법.
- 제1항에 있어서,상기 엔디안 플립 동작을 수행하는 단계는 상기 데이터에 대응하는 바이트들을 교환(swapping)하는 단계를 포함하는 코드 컴파일 방법.
- 제6항에 있어서,상기 데이터에 대응하는 바이트들을 교환하는 단계는 상기 데이터를 메모리에 쓰기 전 및 상기 메모리로부터 상기 데이터를 읽은 후에 수행되는 코드 컴파일 방법.
- 제6항에 있어서,상기 바이트들을 교환하는 단계는 기계 코드(machine code)에 하나 이상의 기계 명령(machine instruction)을 삽입하는 단계를 포함하는 코드 컴파일 방법.
- 제8항에 있어서,상기 하나 이상의 기계 명령은 BSWAP 명령을 포함하는 코드 컴파일 방법.
- 제1항에 있어서,공통 부분식(common sub-expression)의 존재를 결정 시에 중복 엔디안 플립 동작을 제거하는 단계를 더 포함하는 코드 컴파일 방법.
- 제1항에 있어서,상기 엔디안 플립 동작을 명령 스트림의 앞 부분(earlier portion)으로 이동시키는 단계를 더 포함하는 코드 컴파일 방법.
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 플래그를 설정하여, 소스 코드를 중간 표현으로 변환하기 전에, 엔디안 유형을 상기 소스 코드 내의 데이터에 지정하고, 상기 소스 코드를 추상 구문 트리로 변환하기 위한 전단 장치(front end unit); 및상기 추상 구문 트리를 상기 중간 표현으로 변환하고, 상기 데이터의 상기 엔디안 유형 및 타깃 시스템의 엔디안 유형에 기초하여 엔디안 플립 동작을 수행할 시기를 결정하기 위한 중간 언어 장치(intermediate language unit); 및상기 중간 표현을 기계 코드로 변환하기 위한 코드 발생기를 포함하는 컴파일러를 저장하는 컴퓨터 판독가능 매체.
- 제19항에 있어서,상기 전단 장치는 코드 내의 상기 데이터의 선언으로부터 상기 데이터의 상기 엔디안 유형을 결정하는, 컴파일러를 저장하는 컴퓨터 판독가능 매체.
- 제19항에 있어서,상기 전단 장치는 암시적 선언 기준에 기초하여 상기 데이터의 상기 엔디안 유형을 결정하는, 컴파일러를 저장하는 컴퓨터 판독가능 매체.
- 제19항에 있어서,상기 컴파일러는 공통 부분식의 존재를 결정 시에 중복 엔디안 플립 동작 제거하는 최적화 장치(optimizer unit)를 더 포함하는, 컴파일러를 저장하는 컴퓨터 판독가능 매체.
- 제19항에 있어서,상기 컴파일러는 엔디안 플립 동작을 명령 스트림의 앞 부분으로 이동시키는 최적화 장치를 더 포함하는, 컴파일러를 저장하는 컴퓨터 판독가능 매체.
- 제19항에 있어서,상기 코드 발생기(code generator)는 상기 엔디안 플립 동작을 가능하게 하도록 하나 이상의 기계 명령들을 삽입하는, 컴파일러를 저장하는 컴퓨터 판독가능 매체.
- 메모리; 및플래그를 설정하여, 소스 코드를 중간 표현으로 변환하기 전에, 엔디안 유형을 상기 소스 코드 내의 데이터에 지정하고, 상기 소스 코드를 추상 구문 트리로 변환하는 전단 장치, 상기 추상 구문 트리를 상기 중간 표현으로 변환하고, 상기 데이터의 상기 엔디안 유형 및 타깃 시스템의 엔디안 유형에 기초하여 엔디안 플립 동작을 수행하는 시기를 결정하는 중간 언어 장치, 및 상기 중간 표현을 기계 코드로 변환하기 위한 코드 발생기를 가지는 컴파일러를 구현하는 프로세서를 포함하는 컴퓨터 시스템.
- 제25항에 있어서,상기 전단 장치는 코드 내의 상기 데이터의 선언으로부터 상기 데이터의 상기 엔디안 유형을 결정하는 컴퓨터 시스템.
- 제25항에 있어서,상기 전단 장치는 암시적 선언 기준에 기초하여 상기 데이터의 상기 엔디안 유형을 결정하는 컴퓨터 시스템.
- 제25항에 있어서,상기 코드 발생기는 상기 엔디안 플립 동작을 가능하게 하도록 하나 이상의 기계 명령을 삽입하는, 컴퓨터 시스템.
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)
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)
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)
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 |
-
2004
- 2004-12-13 US US11/010,490 patent/US7552427B2/en not_active Expired - Fee Related
-
2005
- 2005-12-09 WO PCT/US2005/044772 patent/WO2006065689A1/en active Application Filing
- 2005-12-09 KR KR1020097025678A patent/KR100962746B1/ko not_active IP Right Cessation
- 2005-12-09 EP EP05853640A patent/EP1846819A1/en not_active Ceased
- 2005-12-09 KR KR1020077013380A patent/KR100947137B1/ko not_active IP Right Cessation
- 2005-12-09 CN CN200580042563.6A patent/CN101160564B/zh not_active Expired - Fee Related
- 2005-12-09 JP JP2007545690A patent/JP2008523514A/ja active Pending
-
2009
- 2009-05-11 US US12/454,005 patent/US8863103B2/en not_active Expired - Fee Related
Patent Citations (4)
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 |