JPS62269238A - コンパイル方式 - Google Patents

コンパイル方式

Info

Publication number
JPS62269238A
JPS62269238A JP11327686A JP11327686A JPS62269238A JP S62269238 A JPS62269238 A JP S62269238A JP 11327686 A JP11327686 A JP 11327686A JP 11327686 A JP11327686 A JP 11327686A JP S62269238 A JPS62269238 A JP S62269238A
Authority
JP
Japan
Prior art keywords
code
optimization
syntax tree
expression
bit
Prior art date
Legal status (The legal status 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 status listed.)
Pending
Application number
JP11327686A
Other languages
English (en)
Inventor
Yoshio Katayama
片山 善夫
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
PFU Ltd
Original Assignee
PFU Ltd
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 PFU Ltd filed Critical PFU Ltd
Priority to JP11327686A priority Critical patent/JPS62269238A/ja
Publication of JPS62269238A publication Critical patent/JPS62269238A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。

Description

【発明の詳細な説明】 〔概要〕 高級言語の整数型の式のコンパイルにおいて、式の各要
素の取り得る値の範囲をビット数と符号で表すことによ
って、余分な被演算子拡張命令の出力の抑制を効果的か
つ容易に行うようにしたコンパイル方式である。
〔産業上の利用分野〕
本発明は、被演算子(演算データ)のビット数nと符号
Sとを求め、これらを参照して余分な被演算子拡張命令
を抑止するようになったコンパイル方式に関するもので
ある。
〔従来の技術〕
高級言語の整数型の式のコンパイルにおいて、その言語
の文法で要求しているビット数で演算を行うようなオブ
ジェクトを生成するのが一般的であるが、被演算子のビ
ット数が短かいときは被演算子の拡張命令(符号拡張命
令や上位0詰め命令等)が必要となる。
〔解決しようとする問題点〕
しかし、式によっては文法で要求しているビット数より
短かいビット数で演算を行なっても、文法で要求してい
る結果を得ることができる場合もあり、このとき前述の
拡張命令が無駄になってしまう。
本発明は、この点に鑑みて創作されたものであって、文
法で要求している結果を得るために必要となる演算長及
び符号を求め、これらを参照して最適な演算長で演算を
行うようなオブジェクトを生成し、これによってオブジ
ェクト・プログラムの性能を向上できるようになったコ
ンパイル方式を提供することを目的としている。
〔問題点を解決するための手段〕
要約すると、本発明は下記のようなものである。
式中の被演算子の取り得る値の範囲をビット数nと符号
Sで表す。即ち、式の取り得る値の上限及び下限をそれ
ぞれり、  Uとすると、2の補数表現による計算機の
場合には、 −1・S・2′″≦L 2′″−1≧U を満たす最小の非負整数n、sを求め、1の補数表現又
は絶対値表現の計算機の場合には、−1−9−2”+1
≦L 2”、−1≧U を満たす最小の非負整数n、sを求める。これらの値を
基に各演算の結果が取り得る値を求め同様に表現する。
この範囲から各演算に最適な演算長、即ち演算結果を表
現し得るビット数で且つターゲット計X機で効率よく実
行できる最小ビットを決定する。この演算長を基に必要
に応じて被演算子の拡張命令を出力すれば、余分な拡張
命令の出力を抑止出来る。
〔実施例〕
以下、本発明を実施例を参照しつつ説明する。
第1図は本発明のコンパイラの機能ブロック図である。
第1図において、lは字句解析部、2は構文解析部、3
は最適化部、4は精度計算部、5はコード生成部をそれ
ぞれ示している。字句解析部1は、ソースプログラムの
字句を解析する部分である。構文解析部2は、ソースプ
ログラムを表す構文木を作成する部分である。最適化部
3は、構文木並びに精度計算で得られた被演算子のビッ
ト長。及び符号Sを参照して最適化を行う部分である。
コード生成部3は、最適化部3から渡された構文木に基
づいてオブジェクト・コードを生成する部分である。コ
ード生成部5に渡されるデータは、式を木によって表現
している。各ノードに設定される情報は、通常のコンパ
イラで設定される情報(演算個の種類、型、レジスタ情
報等)の他に、精度計算の結果(符号S及びビット長n
)がある。
第2図(alは構文木の1例を示す図である。この構文
木は、 i=j+に+j! なる式を表している。iをint型(32ビツト)、j
、に、lをchar型(8ビット符合付き)とする。i
のビット長nは31であり、符号Sは1である。即ち、
iの取り得る値は、−231ないし2:11 1である
。また、j、  k、ttのビット長は7であり、符号
Sは1である。即ち、j。
k、lの取り得る値は、−27ないし27−1である。
この式を実行するためのオブジェクト・プログラムは下
記のようになる。なお、計算機は8ビツト、16ビツト
又は32ビツトの演算を行い得るものとする。
move、b  j、dQ ext、w   d。
move、b  k、di ext、w   di addow   di、d。
move、b  l、di ext、w   dl add、w   dl、d。
ext、l   dO move、j!  do、i となる。上記の命令列において、dQとdlはレジスタ
を表す。また、move、bは8ビツトのmove命令
、move、wは16ビツトのm。
ve命令、move、lは32ビツトのmove命令を
表している。更に、ext、wは8ビソトのデータを1
6ビツトのデータに変換する命令、ext、Jは16ビ
ソトのデータを32ビツトのデータに変換する命令を表
している。更に、addowは16ビツトの加算命令を
表している。
第2図(blは構文木の他例を示す図である。この構文
木は、 1=jXf なる式を表している。第2図(alと同様に、iはin
t型であり、jとkをchar型とする。×のノードの
ビット長n及び符号Sは 5=1 n−15となる。この式を実行するためのオブジェクト
・プログラムは下記のようになる。
move、b  j、d。
6)(t、w   d。
move、b  k、dl ext、w   di muls    di、dO move、1  do、i となる。上記の命令列において「mu 1 s  d 
l。
d、OJはレジスタdOの16ビツトのデータとレジス
タd1の16ビツトのデータを乗算し、32ビツトの乗
算結果をレジスタdOにセットすべきことを意味してい
る。
第2図(C1は構文木の他例を示す図である。この構文
木は、 i=j+に なる式を表している。第2図(alと同様に、iはin
t型であり、j(!:kをchar型とする。÷のノー
ドのビット長n及び符号Sは 5==1 n=7 となる。この式を実行するためのオブジェクト・プログ
ラムは下記のようになる。
move、b  j、dQ ext、w   dQ ext、l   d。
move、b  k、di ext、w   di divs    dl、d。
ext、1     d。
move      do、i となる。上記の命令列においてrdivs  di。
dOJは、レジスタdOの32ビツトのデータをレジス
タd1の16ビツトのデータで割算し、16ビノトの割
算結果をレジスタdoにセットすべきことを意味してい
る。
第3図は精度計算部4の処理を説明するフローチャート
である。精度計算部4では下記のような処理が行われる
■ 構文木から取り出したノードが演算子か否かを調べ
る。Yesのときは■の処理を行い、N。
のときは■の処理を行う。
■ 左側部分木の符号S及びビット長nを求める。
即ち、精度計算を行う。
■ 二項演算子か否かを調べる。Yesのときは■の処
理を行い、NOのときは■の処理を行う。
■ 右側部分木の符号S及びビット長nを求める。
即ち、精度計算を行う。
■ 演算子の種類に応じて、複数の■の処理の中の1個
を行う。
■ 演算子毎に上限及び下限を求め、符号S及びビット
長nを求める。例えば、演算子が加算を示している場合
には、 s←max (s  、  s  ) n4−max (n  、  n  ) +1とする。
■ データ型より符号S及びビット長nを求める。
■ 符号S及びビット長nを対応するノードに記入する
第4図は最適化部3の処理を説明するための図である。
最適化部3は、通常のコンパイラで行っている最適化の
他に、精度計算結果に基づく最適化を行っている。第4
図fatは最適化部3の処理の概要を示す。最初に精度
計算部4を呼び出して、構文解析部2から渡された木の
各ノードについての精度計算を精度計算部4に行わせ、
次に最適化処理を行う。
第4図(blは最適化部3の最適化処理の流れを説明す
る図である。最適化処理は次のようなものである。
■ 演算個か否かを調べる。YESのときは■の処理を
行い、NOのときは■の処理を行う。
■ 左側部分木の最適化を行う。
■ 二項演算子か否かを調べる。YESのときは■の処
理を行い、NOのときは■の処理を行う。
■ 右側の部分木の最適化を行う。
■ ノードの種類のに応じて複数の■の処理の中の1個
を選択する。
■ 各ノード毎の最適化を行う。
■ そのノードの精度計算を行う。
最適化部3で行われる最適化の例を示す。例えば、符号
SがOで且つビット長nが5のデータと、x x、 x
 OOOOOと言う定数データの論理積を取る式の場合
、論理積のノードには定数“0”を記入する。
符号Sを使用することの意義は下記の通りである。文法
によって符号無し演算が行われることを表す以外に、次
に示すように生成コードの改善が可能となる。符号が無
い場合(即ち、5=0)は、符号がある場合(即ち、5
=1)の部分集合となるため、必要とするビット長く即
ち、s+n)に制限がなければ符号Sの意義はない。し
かし、符号ビットを表すビットのために、精度拡張が必
要となる場合があり、このときに有効である。
符号付き演算と符号無し演算によって、命令が区別され
る場合に、符号無し演算の演算コスト(命令長や実行時
間)が符号付き演算のそれよりも低いときに、符号無し
演算で実行して良いことを検出するのに符号Sを利用す
る。符号Sを最適化のための情報としても利用する。
〔発明の効果〕
以上の説明から明らかなように、本発明によれば、演算
命令において自動的に被演算子の長さを拡張するような
計算機以外では、無駄な被演算子の拡張命令を出力しな
くて済むようになる。また、この処理を行う際、ビット
数で情報を保持しているので、処理が効果的で且つ容易
に行うことが出来る。
【図面の簡単な説明】
第1図は本発明のコンパイラの機能ブロック図・第2図
は構文木の例を示す図、第3図は精度計算部の処理を説
明する図、第4図は最適化部の処理を説明する図である
。 1・・・字句解析部、2・・・構文解析部、3・・・最
適化部、4・・・精度計算部、5・・・コード生成部。

Claims (1)

  1. 【特許請求の範囲】 高級言語の整数型の式のコンパイル方式において、 式を表すソースプログラムの字句解析を行う字句解析部
    (1)と、 ソースプログラムの構文木を作成する構文解析部(2)
    と、 最適化を行う最適化部(3)と、 構文木の各ノードに対応するデータの符号s及びビット
    長nを計算する精度計算部(4)と、最適化部(3)の
    指示並びに符号s及びビット長nが付加された構文木に
    基づいてオブジェクト・コードを生成するコード生成部
    (5)と、 を具備することを特徴とするコンパイル方式。
JP11327686A 1986-05-17 1986-05-17 コンパイル方式 Pending JPS62269238A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP11327686A JPS62269238A (ja) 1986-05-17 1986-05-17 コンパイル方式

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP11327686A JPS62269238A (ja) 1986-05-17 1986-05-17 コンパイル方式

Publications (1)

Publication Number Publication Date
JPS62269238A true JPS62269238A (ja) 1987-11-21

Family

ID=14608070

Family Applications (1)

Application Number Title Priority Date Filing Date
JP11327686A Pending JPS62269238A (ja) 1986-05-17 1986-05-17 コンパイル方式

Country Status (1)

Country Link
JP (1) JPS62269238A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7278138B2 (en) 2001-03-30 2007-10-02 International Business Machines Corporation Computer program conversion and compilation

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7278138B2 (en) 2001-03-30 2007-10-02 International Business Machines Corporation Computer program conversion and compilation

Similar Documents

Publication Publication Date Title
JP2006243839A (ja) 命令生成装置及び命令生成方法
Jones Dictionary-free overloading by partial evaluation
US20080177985A1 (en) Condition code flag emulation for program code conversion
JP4157016B2 (ja) コンパイラ装置及びコンパイル方法
US5949993A (en) Method for the generation of ISA simulators and assemblers from a machine description
JP3246438B2 (ja) 可変ターゲットコンパイル処理方法、その処理装置、そのプログラムの記憶媒体および変換テーブルの記憶媒体
Pyeatt et al. ARM 64-bit assembly language
Berz et al. COSY INFINITY version 8.1 programming manual
KR20080096306A (ko) 규칙에 기반하여 스케일링 쉬프트의 최적의 위치를 찾는컴파일 방법 및 시스템
CN112416313B (zh) 支持大整数数据类型和运算符的编译方法
JPS62269238A (ja) コンパイル方式
Evans et al. Itanium architecture for programmers: understanding 64-bit processors and EPIC principles
CN112799724A (zh) 一种稳定控制装置策略表解析计算方法及装置
Srivastava et al. C in Depth
Richard L Fundamentals of C++ Programming
JP2004013190A (ja) ソフトウエア開発環境、シミュレータ及び記録媒体
Skinner The C++ primer: a gentle introduction to C++
Wendt Fast code generation using automatically-generated decision trees
Jorgensen MIPS Assembly Language Programming using QtSpim
Nita et al. Compilation Technique Learning Design Using Automatic Lessimic Analysis Method
KR0169909B1 (ko) 목표 프로세서용 어셈블리 코드 생성기를 작성하는 방법
JPH09330210A (ja) コンパイラにおける乗算実施方法
US20050166192A1 (en) Run time compiler system and method
Chopra C Programming: A Self-Teaching Introduction
JP4327533B2 (ja) 演算処理プログラム、演算処理方法、および演算処理装置