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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 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;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成a天堂v人片| 欧美一区二区在线视频| 久久66热re国产| 国产精品国产精品国产专区不蜜 | 亚洲免费资源在线播放| 在线精品视频一区二区三四| 国模套图日韩精品一区二区| 国产高清久久久久| 欧美色大人视频| 91麻豆福利精品推荐| caoporen国产精品视频| 懂色中文一区二区在线播放| 国产精品一区二区男女羞羞无遮挡| 久久不见久久见免费视频7 | 亚洲另类春色校园小说| 国产成人在线视频网址| 国产精品资源在线看| 视频一区二区中文字幕| 欧美高清视频不卡网| 亚洲亚洲人成综合网络| 国产精品一二三| 色菇凉天天综合网| 91影院在线观看| 不卡的电影网站| 不卡的电影网站| 精品日本一线二线三线不卡| 久久女同性恋中文字幕| 欧美色网站导航| 国产成人av在线影院| 天堂在线亚洲视频| 国产日产亚洲精品系列| 26uuu亚洲| 精品国产乱子伦一区| 亚洲免费av观看| 国产精品毛片高清在线完整版| 972aa.com艺术欧美| 精品噜噜噜噜久久久久久久久试看| 午夜欧美电影在线观看| 欧美三级三级三级爽爽爽| 亚洲电影视频在线| 国产精品第五页| 国产成人综合视频| 欧美国产一区在线| 日韩欧美中文一区| 国产清纯美女被跳蛋高潮一区二区久久w | 欧美一区二区三区啪啪| 精品国产精品一区二区夜夜嗨| 久久夜色精品一区| 欧美精品三级日韩久久| 中文字幕日本乱码精品影院| 亚洲成人精品在线观看| 亚洲免费在线视频一区 二区| 午夜欧美2019年伦理| 精品写真视频在线观看| 久久精品国产亚洲高清剧情介绍| 亚洲免费av高清| 亚洲欧美经典视频| 欧美日韩免费在线视频| 亚洲综合成人在线视频| 7777女厕盗摄久久久| 久久国产成人午夜av影院| 国产日韩欧美精品综合| 国产清纯在线一区二区www| 欧美激情中文字幕| 免费一区二区视频| 欧美高清一级片在线| 五月天网站亚洲| 欧美日韩国产高清一区二区| 一区2区3区在线看| 欧美三区在线观看| 午夜欧美电影在线观看| 91麻豆精品91久久久久同性| 日韩av一二三| 日韩一级精品视频在线观看| 久久精品国产99国产精品| 日韩免费一区二区| 看电视剧不卡顿的网站| 久久综合中文字幕| 亚洲免费看黄网站| 91片黄在线观看| 极品少妇xxxx精品少妇| 一本一道综合狠狠老| 毛片一区二区三区| 国产精品一级二级三级| 国产999精品久久久久久| 欧美色综合网站| 国产一区视频导航| 成人免费毛片app| 色婷婷精品久久二区二区蜜臂av| 欧美色视频在线| 成人免费视频一区二区| 奇米888四色在线精品| 夜夜嗨av一区二区三区 | 欧美日韩国产大片| 国产成人av一区| 日韩国产精品久久| 国产亚洲精品bt天堂精选| aaa国产一区| 亚洲国产综合在线| 亚洲综合丁香婷婷六月香| 欧美群妇大交群中文字幕| 欧美视频第二页| 欧美在线观看视频一区二区 | 欧美挠脚心视频网站| 91.xcao| 精品国产乱码久久久久久免费| 91精品一区二区三区在线观看| 欧美一区二区三区免费视频| 欧美精品电影在线播放| 欧美一区二区三区免费视频| 精品剧情v国产在线观看在线| 久久精品人人做人人爽97| 亚洲毛片av在线| 图片区小说区国产精品视频| 国产一区在线观看视频| 666欧美在线视频| 日韩一区二区三区三四区视频在线观看 | 91在线免费播放| 国模少妇一区二区三区| 免费高清在线视频一区·| 性欧美大战久久久久久久久| 一二三区精品福利视频| 日本视频在线一区| 一本色道久久综合精品竹菊 | 麻豆中文一区二区| 午夜精品久久久久久久99樱桃| 亚洲国产激情av| 亚洲欧洲成人av每日更新| 图片区日韩欧美亚洲| 青娱乐精品视频| 日韩国产精品91| 成人午夜短视频| 在线不卡a资源高清| 久久久噜噜噜久噜久久综合| 夜夜精品浪潮av一区二区三区| 免费不卡在线视频| 色综合av在线| 久久久久9999亚洲精品| 欧美另类高清zo欧美| 中文一区一区三区高中清不卡| 丝袜美腿一区二区三区| 91免费小视频| 国产精品丝袜黑色高跟| 日本va欧美va精品| 欧美在线视频不卡| 夜夜操天天操亚洲| 色综合久久久久网| 亚洲人成在线观看一区二区| 丁香六月综合激情| 中文字幕不卡三区| 成人av手机在线观看| 国产精品成人免费精品自在线观看 | 337p亚洲精品色噜噜| 偷拍日韩校园综合在线| 成人高清视频免费观看| 国产色一区二区| 成人午夜又粗又硬又大| 日本一区二区在线不卡| 成人激情免费视频| 亚洲色图都市小说| 91久久奴性调教| 亚洲一区二区三区视频在线 | 综合欧美亚洲日本| 亚洲在线视频一区| 欧美影院精品一区| 亚洲动漫第一页| 欧美剧在线免费观看网站| 三级欧美韩日大片在线看| 日韩三级高清在线| 99在线精品免费| 日日摸夜夜添夜夜添亚洲女人| 久久免费电影网| 色哟哟精品一区| 久久99国产精品麻豆| 国产精品福利在线播放| 欧美精品 日韩| 岛国av在线一区| 亚洲国产成人va在线观看天堂| 日韩欧美国产一区二区在线播放| 成人在线视频一区二区| 天堂久久久久va久久久久| 久久久无码精品亚洲日韩按摩| 色狠狠色噜噜噜综合网| 激情五月婷婷综合网| 午夜影院久久久| 中文字幕在线不卡国产视频| 在线播放中文一区| 一本色道久久综合亚洲aⅴ蜜桃 | 日韩亚洲欧美一区二区三区| 99视频在线精品| 国产乱对白刺激视频不卡| 亚洲成a人v欧美综合天堂下载| 国产日韩欧美制服另类| 日韩一区二区三区三四区视频在线观看 | 91精品欧美福利在线观看| 在线日韩av片| 欧美日韩一区国产| 色天天综合久久久久综合片| 成人免费视频国产在线观看| 国产做a爰片久久毛片|