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

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

?? basic-optimizer.c

?? 支持AMD64的匯編編譯器源碼
?? C
字號:
/* * Basic optimizer (equivalent to the NASM 2-pass 'no optimizer' design) * *  Copyright (C) 2001  Peter Johnson * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``AS IS'' * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR OTHER CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */#include <util.h>/*@unused@*/ RCSID("$Id: basic-optimizer.c 1137 2004-09-04 01:24:57Z peter $");#define YASM_LIB_INTERNAL#define YASM_BC_INTERNAL#include <libyasm.h>#define SECTFLAG_NONE		0UL#define SECTFLAG_INPROGRESS	(1UL<<0)#define SECTFLAG_DONE		(1UL<<1)#define BCFLAG_NONE		0UL#define BCFLAG_INPROGRESS	(1UL<<0)#define BCFLAG_DONE		(1UL<<1)static int basic_optimize_section_1(yasm_section *sect,				    /*@unused@*/ /*@null@*/ void *d);static /*@null@*/ yasm_intnum *basic_optimize_calc_bc_dist_1(yasm_bytecode *precbc1, yasm_bytecode *precbc2){    unsigned int dist;    yasm_intnum *intn;    if (precbc1->section != precbc2->section)	yasm_internal_error(N_("Trying to calc_bc_dist between sections"));    if (yasm_section_get_opt_flags(precbc1->section) == SECTFLAG_NONE) {	/* Section not started.  Optimize it (recursively). */	basic_optimize_section_1(precbc1->section, NULL);    }    /* If a section is done, the following will always succeed.  If it's in-     * progress, this will fail if the bytecode comes AFTER the current one.     */    if (precbc2 != yasm_section_bcs_first(precbc2->section)) {	if (precbc2->opt_flags == BCFLAG_DONE) {	    dist = precbc2->offset + precbc2->len;	    if (precbc1 != yasm_section_bcs_first(precbc1->section)) {		if (precbc1->opt_flags == BCFLAG_DONE) {		    if (dist < precbc1->offset + precbc1->len) {			intn = yasm_intnum_create_uint(precbc1->offset +						       precbc1->len - dist);			yasm_intnum_calc(intn, YASM_EXPR_NEG, NULL,					 precbc1->line);			return intn;		    }		    dist -= precbc1->offset + precbc1->len;		} else {		    return NULL;		}	    }	    return yasm_intnum_create_uint(dist);	} else {	    return NULL;	}    } else {	if (precbc1 != yasm_section_bcs_first(precbc1->section)) {	    if (precbc1->opt_flags == BCFLAG_DONE) {		intn = yasm_intnum_create_uint(precbc1->offset + precbc1->len);		yasm_intnum_calc(intn, YASM_EXPR_NEG, NULL, precbc1->line);		return intn;	    } else {		return NULL;	    }	} else {	    return yasm_intnum_create_uint(0);	}    }}typedef struct basic_optimize_data {    /*@observer@*/ yasm_bytecode *precbc;    int saw_unknown;} basic_optimize_data;static intbasic_optimize_bytecode_1(/*@observer@*/ yasm_bytecode *bc, void *d){    basic_optimize_data *data = (basic_optimize_data *)d;    yasm_bc_resolve_flags bcr_retval;    /* Don't even bother if we're in-progress or done. */    if (bc->opt_flags == BCFLAG_INPROGRESS)	return 1;    if (bc->opt_flags == BCFLAG_DONE)	return 0;    bc->opt_flags = BCFLAG_INPROGRESS;    bc->offset = data->precbc->offset + data->precbc->len;    data->precbc = bc;    /* We're doing just a single pass, so essentially ignore whether the size     * is minimum or not, and just check for indeterminate length (indicative     * of circular reference).     */    bcr_retval = yasm_bc_resolve(bc, 0, basic_optimize_calc_bc_dist_1);    if (bcr_retval & YASM_BC_RESOLVE_UNKNOWN_LEN) {	if (!(bcr_retval & YASM_BC_RESOLVE_ERROR))	    yasm__error(bc->line, N_("circular reference detected."));	data->saw_unknown = -1;	return 0;    }    bc->opt_flags = BCFLAG_DONE;    return 0;}static intbasic_optimize_section_1(yasm_section *sect, /*@null@*/ void *d){    /*@null@*/ int *saw_unknown = (int *)d;    basic_optimize_data data;    unsigned long flags;    int retval;    data.precbc = yasm_section_bcs_first(sect);    data.saw_unknown = 0;    /* Don't even bother if we're in-progress or done. */    flags = yasm_section_get_opt_flags(sect);    if (flags == SECTFLAG_INPROGRESS)	return 1;    if (flags == SECTFLAG_DONE)	return 0;    yasm_section_set_opt_flags(sect, SECTFLAG_INPROGRESS);    retval = yasm_section_bcs_traverse(sect, &data, basic_optimize_bytecode_1);    if (retval != 0)	return retval;    if (data.saw_unknown != 0 && saw_unknown)	*saw_unknown = data.saw_unknown;    yasm_section_set_opt_flags(sect, SECTFLAG_DONE);    return 0;}static intbasic_optimize_bytecode_2(/*@observer@*/ yasm_bytecode *bc, /*@null@*/ void *d){    basic_optimize_data *data = (basic_optimize_data *)d;    assert(data != NULL);    if (bc->opt_flags != BCFLAG_DONE)	yasm_internal_error(N_("Optimizer pass 1 missed a bytecode!"));    bc->offset = data->precbc->offset + data->precbc->len;    data->precbc = bc;    if (yasm_bc_resolve(bc, 1, yasm_common_calc_bc_dist) < 0)	return -1;    return 0;}static intbasic_optimize_section_2(yasm_section *sect, /*@unused@*/ /*@null@*/ void *d){    basic_optimize_data data;    data.precbc = yasm_section_bcs_first(sect);    if (yasm_section_get_opt_flags(sect) != SECTFLAG_DONE)	yasm_internal_error(N_("Optimizer pass 1 missed a section!"));    return yasm_section_bcs_traverse(sect, &data, basic_optimize_bytecode_2);}static voidbasic_optimize(yasm_object *object){    int saw_unknown = 0;    /* Optimization process: (essentially NASM's pass 1)     *  Determine the size of all bytecodes.     *  Forward references are /not/ resolved (only backward references are     *   computed and sized).     *  Check "critical" expressions (must be computable on the first pass,     *   i.e. depend only on symbols before it).     *  Differences from NASM:     *   - right-hand side of EQU is /not/ a critical expr (as the entire file     *     has already been parsed, we know all their values at this point).     *   - not strictly top->bottom scanning; we scan through a section and     *     hop to other sections as necessary.     */    if (yasm_object_sections_traverse(object, &saw_unknown,				      basic_optimize_section_1) < 0 ||	saw_unknown != 0)	return;    /* Check completion of all sections and save bytecode changes */    yasm_object_sections_traverse(object, NULL, basic_optimize_section_2);}/* Define optimizer structure -- see optimizer.h for details */yasm_optimizer_module yasm_basic_LTX_optimizer = {    YASM_OPTIMIZER_VERSION,    "Only the most basic optimizations",    "basic",    basic_optimize};

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
av亚洲精华国产精华精华| www.亚洲色图.com| 亚洲欧美激情在线| 欧美极品另类videosde| 久久亚洲私人国产精品va媚药| 777xxx欧美| 日韩三级伦理片妻子的秘密按摩| 欧美军同video69gay| 67194成人在线观看| 日韩午夜激情免费电影| 欧美一区二区三区性视频| 日韩欧美国产精品一区| 日韩三级伦理片妻子的秘密按摩| 欧美大片一区二区| 亚洲精品一区二区三区影院| 欧美xxxxx牲另类人与| 久久蜜桃一区二区| 国产精品你懂的在线| 亚洲天堂a在线| 亚洲福利电影网| 日韩国产精品久久| 国产在线精品一区二区| 成人一级视频在线观看| 在线观看一区二区视频| 91精品国产欧美日韩| 国产亚洲短视频| 亚洲天堂网中文字| 奇米精品一区二区三区在线观看一 | 日韩欧美的一区二区| 欧美不卡在线视频| 久久久久九九视频| 亚洲综合小说图片| 久久国产日韩欧美精品| 成人av资源下载| 欧美日韩精品一区二区三区四区 | 国产日本欧美一区二区| 亚洲人快播电影网| 久久99日本精品| 粉嫩一区二区三区在线看| 日本韩国一区二区| 欧美一级在线观看| ●精品国产综合乱码久久久久| 香蕉久久一区二区不卡无毒影院 | 欧美在线不卡一区| 日韩美女一区二区三区四区| 日日夜夜精品视频天天综合网| 国内精品自线一区二区三区视频| 99久久99久久精品免费看蜜桃| 91精品国产综合久久福利软件| 国产精品视频看| 久久国产精品第一页| 欧美专区日韩专区| 国产精品久久久久影视| 美女在线一区二区| 欧美日韩日日骚| 亚洲欧美视频在线观看视频| 国产精品亚洲午夜一区二区三区| 欧美性色欧美a在线播放| 中文字幕精品一区二区精品绿巨人 | thepron国产精品| 日韩视频免费观看高清完整版在线观看 | 丰满亚洲少妇av| 日韩欧美久久久| 午夜精品福利一区二区三区av| 99久久精品久久久久久清纯| 国产午夜亚洲精品不卡| 另类的小说在线视频另类成人小视频在线 | 日韩欧美一二区| 肉色丝袜一区二区| 欧美特级限制片免费在线观看| 国产精品传媒视频| 成人免费精品视频| 中文字幕国产精品一区二区| 国产麻豆成人精品| 日本一区二区三级电影在线观看| 久久99最新地址| 精品国产乱码久久久久久蜜臀| 亚洲成a人v欧美综合天堂| 色天天综合色天天久久| 亚洲人成人一区二区在线观看| 国产成人av一区二区三区在线 | 精品国产凹凸成av人导航| 丝袜脚交一区二区| 日韩欧美一区二区在线视频| 捆绑紧缚一区二区三区视频| 日韩视频一区二区三区在线播放| 老汉av免费一区二区三区 | 亚洲一区二区影院| 欧美亚男人的天堂| 亚洲福利一二三区| 7777精品伊人久久久大香线蕉的| 青草国产精品久久久久久| 日韩免费福利电影在线观看| 免费成人在线播放| 久久久久久久综合色一本| 福利视频网站一区二区三区| 一区在线中文字幕| 欧美午夜精品一区二区三区| 日韩精品亚洲一区二区三区免费| 日韩一区二区在线免费观看| 国产剧情在线观看一区二区| 日韩精品最新网址| caoporen国产精品视频| 一区二区三区美女| 日韩免费观看高清完整版| 国产成人精品一区二 | 欧美日韩国产免费| 精品一区二区三区久久| 国产精品免费网站在线观看| 欧美午夜精品免费| 国产激情一区二区三区四区| 亚洲欧美日韩一区二区| 欧美成人三级电影在线| 99re在线精品| 麻豆免费精品视频| 亚洲激情校园春色| 久久―日本道色综合久久| 91麻豆文化传媒在线观看| 精品伊人久久久久7777人| 亚洲视频一区二区免费在线观看| 91麻豆精品国产| 91在线国产福利| 韩国精品久久久| 一区二区三区视频在线看| 精品国产一区二区三区四区四| 色综合久久久久网| 国产大陆亚洲精品国产| 日韩av一级片| 亚洲已满18点击进入久久| 欧美国产1区2区| 精品国产区一区| 欧美一区日韩一区| 色婷婷综合久久久| 福利一区在线观看| 韩国成人在线视频| 免费三级欧美电影| 亚洲综合免费观看高清完整版在线 | av不卡免费电影| 国产在线精品免费| 麻豆国产一区二区| 天天av天天翘天天综合网| 18欧美亚洲精品| 中文字幕不卡在线播放| 精品对白一区国产伦| 欧美一卡在线观看| 69av一区二区三区| 这里只有精品电影| 欧美日韩一区二区三区在线看| 99在线精品观看| 99久久精品一区| 成人动漫中文字幕| 成熟亚洲日本毛茸茸凸凹| 国产激情偷乱视频一区二区三区| 免费xxxx性欧美18vr| 日本少妇一区二区| 久久国产综合精品| 韩国成人精品a∨在线观看| 久久精品国产免费| 国内精品第一页| 国产九九视频一区二区三区| 国产精品亚洲成人| 国产麻豆视频一区| 不卡电影一区二区三区| 99视频超级精品| 在线观看亚洲成人| 欧美情侣在线播放| 精品国产一区二区精华| 精品国产乱码久久久久久蜜臀| 久久久久久亚洲综合影院红桃| 久久久久九九视频| 综合色中文字幕| 亚洲风情在线资源站| 免费成人在线网站| 成人激情视频网站| 色噜噜狠狠成人中文综合| 欧美精品视频www在线观看| 欧美一区二区黄| 国产精品每日更新在线播放网址| 国产精品久久久久久亚洲伦| 亚洲精品美国一| 美国毛片一区二区| 成人免费毛片嘿嘿连载视频| 91麻豆国产自产在线观看| 欧美日韩国产精选| 国产偷国产偷精品高清尤物| 一区二区欧美精品| 精品一区二区三区久久| 一本高清dvd不卡在线观看| 51午夜精品国产| 国产精品久久久久四虎| 午夜视频在线观看一区二区三区| 精品一区二区久久| 91亚洲精品久久久蜜桃网站 | 99久久久久免费精品国产| 欧美精品色综合| 国产精品乱码一区二区三区软件 | 国产日韩精品一区二区浪潮av| 国产日韩av一区| 午夜精品成人在线视频| 粉嫩绯色av一区二区在线观看|