亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? peep68.c

?? C語言編譯器的源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
 * 68K/386 32-bit C compiler.
 *
 * copyright (c) 1997, David Lindauer
 * 
 * This compiler is intended for educational use.  It may not be used
 * for profit without the express written consent of the author.
 *
 * It may be freely redistributed, as long as this notice remains intact
 * and either the original sources or derived sources 
 * are distributed along with any executables derived from the originals.
 *
 * The author is not responsible for any damages that may arise from use
 * of this software, either idirect or consequential.
 *
 * v1.35 March 1997
 * David Lindauer, gclind01@starbase.spd.louisville.edu
 *
 * Credits to Mathew Brandt for original K&R C compiler
 *
 */
/*
 * peepcode optimizations
 */
#include        <stdio.h>
#include        "expr.h"
#include        "c.h"
#include        "gen68.h"
#include 				"diag.h"

extern SYM *currentfunc;

OCODE    *peep_head = 0,
                *peep_tail = 0,
					*peep_insert;

extern int prm_buggyclr;

void peepini(void)
{
	peep_head = peep_tail = 0;
}
AMODE    *copy_addr(AMODE *ap)
/*
 *      copy an address mode structure (these things dont last).
 */
{       AMODE    *newap;
        if( ap == 0 )
                return 0;
        newap = xalloc(sizeof(AMODE));
        newap->mode = ap->mode;
        newap->preg = ap->preg;
        newap->sreg = ap->sreg;
				newap->scale = ap->scale;
        newap->tempflag = ap->tempflag;
        newap->offset = ap->offset;
        return newap;
}

void gen_code(int op,int len,AMODE *ap1,AMODE *ap2)
/*
 *      generate a code sequence into the peep list.
 */
{       OCODE    *new;
        new = xalloc(sizeof(OCODE));
        new->opcode = op;
				if (len < 0)
        	new->length = -len;
				else
        	new->length = len;
        new->oper1 = copy_addr(ap1);
        new->oper2 = copy_addr(ap2);
				new->oper3 = 0;
        add_peep(new);
}
void gen_lea(int size, AMODE *ap1, AMODE * ap2)
{
				AMODE *ap3,*ap4;
				if (ap1->mode== am_ainc || ap1->mode == am_adec) {
					enum e_am om = ap1->mode;
					if (!size) {
						size = 1;
						DIAG("Illegal len in autoinc lea");
					}
					if (size < 0) size = - size;
				  ap1->mode = am_ind;
					ap3 = copy_addr(ap1);
					ap3->mode = am_areg;
					ap4 = make_immed(size);
					gen_code(op_move,4,ap3,ap2);
					if (om == am_ainc)
						gen_code(op_add,4,ap4,ap3);
					else
						gen_code(op_sub,4,ap4,ap3);
					ap1->mode = om;
				}
				else
					if (ap2->mode == am_areg) {
						if (ap1->mode == am_baseindxaddr && !ap1->scale) {
							if (ap1->preg == ap2->preg && !ap1->offset->v.i) {
								ap3 = xalloc(sizeof(AMODE));
								ap3->mode = am_areg;
								ap3->preg = ap1->sreg;
								gen_code(op_add,4,ap3,ap2);
							}
							else if (ap1->sreg == ap2->preg && !ap1->offset->v.i) {
								ap3 = xalloc(sizeof(AMODE));
								ap3->mode = am_areg;
								ap3->preg = ap1->preg;
								gen_code(op_add,4,ap3,ap2);
							}
							else 
								gen_code(op_lea,size,ap1,ap2);
						}
						else if (ap1->mode == am_baseindxdata && !ap1->offset->v.i && !ap1->scale) {
							if (ap1->preg == ap2->preg) {
								ap3 = xalloc(sizeof(AMODE));
								ap3->mode = am_dreg;
								ap3->preg = ap1->sreg;
								gen_code(op_add,4,ap3,ap2);
							}
							else
								gen_code(op_lea,0,ap1,ap2);
						}
						else
							gen_code(op_lea,0,ap1,ap2);
					}
					else	 
						gen_code(op_lea,0,ap1,ap2);
}
void gen_codelab(SYM *lab)
/*
 *      generate a code sequence into the peep list.
 */
{       OCODE    *new;
        new = xalloc(sizeof(OCODE));
        new->opcode = op_funclabel;
        new->length = 0;
        new->oper1 = lab;
        new->oper2 = 0;
				new->oper3 = 0;
        add_peep(new);
}
void gen_line(SNODE *stmt)
{
				OCODE *new = xalloc(sizeof(OCODE));
				new->opcode = op_line;
				new->length = (int)stmt->exp;
				new->oper1 = (AMODE *)stmt->label;
				new->oper2 = 0;
				new->oper3= 0;
				add_peep(new);
}
void gen_codef(int op, int len, AMODE *ap1, AMODE *ap2)
{
  if (ap1->mode == am_freg) {
		if (!ap2 || ap2->mode == am_freg)
			len=10;
	}
	else if (ap2 && ap2->mode == am_freg) {
		if (ap1->mode == am_immed)
			len = 10;
	}
	gen_code(op,len,ap1,ap2);
}
void gen_code3(int op, int len, AMODE *ap1, AMODE *ap2, AMODE *ap3)
{       OCODE    *new;
        new = xalloc(sizeof(OCODE));
        new->opcode = op;
				if (len < 0)
        	new->length = -len;
				else
        	new->length = len;
        new->oper1 = copy_addr(ap1);
        new->oper2 = copy_addr(ap2);
				new->oper3 = copy_addr(ap3);
        add_peep(new);
}
void add_peep(OCODE *new)
/*
 *      add the ocoderuction pointed to by new to the peep list.
 */
{       if( peep_head == 0 )
                {
                peep_head = peep_tail = new;
                new->fwd = 0;
                new->back = 0;
                }
        else
                {
                new->fwd = 0;
                new->back = peep_tail;
                peep_tail->fwd = new;
                peep_tail = new;
                }
}

void gen_label(int labno)
/*
 *      add a compiler generated label to the peep list.
 */
{       OCODE    *new;
        new = xalloc(sizeof(OCODE));
        new->opcode = op_label;
        new->oper1 = (AMODE *)labno;
        add_peep(new);
}

void flush_peep(void)
/*
 *      output all code and labels in the peep list.
 */
{       opt3();         /* do the peephole optimizations */
				
        while( peep_head != 0 )
                {
                if( peep_head->opcode == op_label )
                        put_label(peep_head);
                else
									if (peep_head->opcode == op_funclabel)
												gen_strlab(peep_head->oper1);
									else
                        put_code(peep_head);
                peep_head = peep_head->fwd;
                }
				/* oc_reorgfunc(); */
				peep_head = 0;
}

void peep_move(OCODE *ip)
/*
 *      peephole optimization for move instructions.
 *      makes quick immediates when possible.
 *      changes move #0,d to clr d.
 *      changes long moves to address registers to short when
 *              possible.
 *      changes move immediate to stack to pea.
 */
{       ENODE    *ep;
				if (ip->noopt)
					return;
				if (ip->oper2->mode == am_areg)
					ip->opcode = op_movea;
        if( ip->oper1->mode != am_immed )
                return;
        ep = ip->oper1->offset;
        if( !isintconst(ep->nodetype))
                return;
        if( ip->oper2->mode == am_areg )
                {
                if( -32768L <= ep->v.i && ep->v.i <= 32768L )
                        ip->length = 2;
                }
        else if( ip->oper2->mode == am_dreg )
                {
                if( -128 <= ep->v.i && ep->v.i <= 127 )
                        {
                        ip->opcode = op_moveq;
                        ip->length = 0;
                        }
                }
        else
                {
                if( ep->v.i == 0 && !prm_buggyclr)
                        {
                        ip->opcode = op_clr;
                        ip->oper1 = ip->oper2;
                        ip->oper2 = 0;
                        }
                else if( ip->oper2->mode == am_adec && ip->oper2->preg == 7 )
                        {
                        ip->opcode = op_pea;       	
                        ip->length = 0;
                        ip->oper1->mode = am_direct;
                        ip->oper2 = 0;
                        }
                }
}

/*
 * get rid of a TST after any other instruction that sets flags if the
 * args match
 */
int peep_tst(OCODE *ip)
{
	if (ip->noopt)
		return;
	if (ip->back->opcode == op_move || ip->back->opcode == op_and || ip->back->opcode == op_or ||
			ip->back->opcode == op_andi || ip->back->opcode == op_ori || ip->back->opcode == op_add ||
			ip->back->opcode == op_addi || ip->back->opcode == op_addq || ip->back->opcode == op_sub ||
			ip->back->opcode == op_subi || ip->back->opcode == op_subq) {
		if (equal_address(ip->back->oper2,ip->oper1)) {
			ip->back->fwd = ip->fwd;
			ip->fwd->back = ip->back;
		}
	}
}
int     equal_address(AMODE *ap1, AMODE *ap2)
/*
 *      compare two address nodes and return true if they are
 *      equivalent.
 */
{       if( ap1 == 0 || ap2 == 0 )
                return 0;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人高清伦理免费影院在线观看| 欧美日韩免费电影| 色婷婷综合久久| 欧美一级视频精品观看| 国产精品久线在线观看| 奇米精品一区二区三区在线观看一| 国产精品18久久久久久久网站| 欧美日韩国产精品自在自线| 国产欧美日韩亚州综合| 日韩va欧美va亚洲va久久| 国产mv日韩mv欧美| 精品国产亚洲一区二区三区在线观看| 亚洲精品一卡二卡| 国v精品久久久网| 精品美女一区二区| 日韩精品视频网| 欧美综合色免费| 亚洲欧洲性图库| 国产91清纯白嫩初高中在线观看| 欧美成人免费网站| 麻豆高清免费国产一区| 欧美日韩成人在线一区| 亚洲线精品一区二区三区八戒| 99久久精品国产一区二区三区 | 日韩成人精品在线| 一本大道综合伊人精品热热| 久久久久国产精品免费免费搜索| 久久国产综合精品| 日韩欧美国产综合一区 | 国产欧美日韩视频一区二区| 蜜臀av一区二区三区| 欧美精品xxxxbbbb| 日韩电影在线免费观看| 欧美日韩国产乱码电影| 亚洲成av人影院在线观看网| 在线这里只有精品| 亚洲午夜在线电影| 在线观看国产精品网站| 亚洲一区二区三区影院| 欧美在线综合视频| 亚洲成人精品在线观看| 555www色欧美视频| 蜜桃av噜噜一区二区三区小说| 国产精品久久久久久久久免费相片 | 久久精品99国产国产精| 精品久久久久久久久久久久久久久 | 在线成人免费视频| 蜜桃视频在线一区| 久久久www成人免费毛片麻豆| 国产99久久久精品| 亚洲精品美国一| 欧美老肥妇做.爰bbww视频| 丝袜美腿亚洲综合| 精品久久久久av影院| 不卡视频在线观看| 亚洲大尺度视频在线观看| 欧美福利电影网| 国产资源精品在线观看| 亚洲欧美一区二区在线观看| 欧美男生操女生| 激情文学综合网| 中文字幕一区二区三区不卡在线 | 日韩一级免费一区| 国产电影一区在线| 亚洲精品免费电影| 精品成人私密视频| 色就色 综合激情| 蜜臀精品久久久久久蜜臀 | 欧美精品一区二区三区久久久 | 中文字幕一区二区三区在线不卡| 色婷婷亚洲一区二区三区| 日本在线不卡视频| 日韩美女视频一区| 精品少妇一区二区三区在线播放| www.激情成人| 麻豆精品视频在线观看免费| 国产精品国产a| 日韩欧美美女一区二区三区| 91免费国产在线| 国产呦萝稀缺另类资源| 亚洲影院在线观看| 欧美国产精品一区二区| 91精品国模一区二区三区| 成人性生交大合| 免费人成网站在线观看欧美高清| 国产精品传媒在线| 亚洲精品成人悠悠色影视| 日韩欧美一级片| 在线观看国产精品网站| www.亚洲色图| 国产精品一级黄| 麻豆视频观看网址久久| 亚洲黄色性网站| 中文字幕在线一区二区三区| 欧美精品一区二区三区视频| 欧美天天综合网| 成人免费福利片| 国产成人在线观看| 另类小说一区二区三区| 午夜欧美视频在线观看| 一区二区免费视频| 国产精品色一区二区三区| 久久久久久**毛片大全| 精品久久久网站| 日韩午夜激情免费电影| 欧美电影一区二区| 欧美日韩一区二区在线观看| 91女厕偷拍女厕偷拍高清| 波多野结衣中文字幕一区| 国产成人亚洲综合色影视| 国产综合久久久久久久久久久久| 免费在线观看一区二区三区| 日韩中文字幕一区二区三区| 亚洲第四色夜色| 亚洲高清久久久| 首页国产欧美久久| 视频一区二区国产| 日韩av一级片| 久久99久久99精品免视看婷婷| 蜜桃一区二区三区在线| 精品亚洲成a人| 国产麻豆精品在线| 粉嫩高潮美女一区二区三区| 国产精品一二三区在线| 高清国产一区二区| 成人午夜电影久久影院| 色综合一区二区三区| 91久久精品一区二区二区| 欧美影视一区二区三区| 欧美日韩亚洲综合在线 | 久久久五月婷婷| 久久久久一区二区三区四区| 久久欧美一区二区| 国产精品久久久久久一区二区三区 | 一本大道av一区二区在线播放| 色综合久久中文字幕综合网| 欧洲亚洲精品在线| 欧美一区二区三区免费大片| 久久综合精品国产一区二区三区| 国产欧美一区二区精品性色 | 99久久精品免费看| 欧美视频日韩视频| 欧美一区二区三区电影| 中文无字幕一区二区三区| 综合在线观看色| 视频一区在线播放| 国产高清久久久| 色婷婷亚洲精品| 久久综合中文字幕| 国产毛片精品视频| 91免费国产在线观看| 日韩欧美色综合| 亚洲精品久久7777| 精东粉嫩av免费一区二区三区| 99免费精品在线观看| 欧美一区二区三区色| 国产精品三级久久久久三级| 午夜视频一区二区| 成人激情图片网| 日韩欧美第一区| 亚洲男人的天堂网| 国产一区在线观看麻豆| 欧美艳星brazzers| 国产亚洲人成网站| 日本不卡一区二区三区高清视频| 成人激情小说乱人伦| 日韩精品专区在线影院重磅| 亚洲婷婷综合色高清在线| 另类欧美日韩国产在线| 91精品福利在线| 国产精品美女久久福利网站| 免费观看成人鲁鲁鲁鲁鲁视频| 99国产精品久久久久| 亚洲精品一区二区三区在线观看| 亚洲欧美国产77777| 国产成人小视频| 日韩欧美亚洲另类制服综合在线| 一区二区三区日韩在线观看| 国产91色综合久久免费分享| 精品久久99ma| 婷婷久久综合九色综合绿巨人| 成av人片一区二区| 久久久亚洲午夜电影| 免费在线观看不卡| 欧美男男青年gay1069videost| 亚洲日穴在线视频| av影院午夜一区| 欧美激情在线一区二区三区| 麻豆国产精品777777在线| 91精品国产一区二区三区| 亚洲不卡在线观看| 欧美视频在线一区| 亚洲无人区一区| 欧美性受极品xxxx喷水| 亚洲免费观看在线视频| 91免费在线看| 一区二区成人在线观看| 欧美午夜电影网| 亚洲高清在线视频| 欧美一区午夜视频在线观看|