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

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

?? math_emulate.c

?? linux0.02源代碼用于研究linux操作系統
?? C
字號:
/* * linux/kernel/math/math_emulate.c * * (C) 1991 Linus Torvalds *//* * Limited emulation 27.12.91 - mostly loads/stores, which gcc wants * even for soft-float, unless you use bruce evans' patches. The patches * are great, but they have to be re-applied for every version, and the * library is different for soft-float and 80387. So emulation is more * practical, even though it's slower. * * 28.12.91 - loads/stores work, even BCD. I'll have to start thinking * about add/sub/mul/div. Urgel. I should find some good source, but I'll * just fake up something. * * 30.12.91 - add/sub/mul/div/com seem to work mostly. I should really * test every possible combination. *//* * This file is full of ugly macros etc: one problem was that gcc simply * didn't want to make the structures as they should be: it has to try to * align them. Sickening code, but at least I've hidden the ugly things * in this one file: the other files don't need to know about these things. * * The other files also don't care about ST(x) etc - they just get addresses * to 80-bit temporary reals, and do with them as they please. I wanted to * hide most of the 387-specific things here. */#include <signal.h>#define __ALIGNED_TEMP_REAL 1#include <linux/math_emu.h>#include <linux/kernel.h>#include <asm/segment.h>#define bswapw(x) __asm__("xchgb %%al,%%ah":"=a" (x):"0" ((short)x))#define ST(x) (*__st((x)))#define PST(x) ((const temp_real *) __st((x)))/* * We don't want these inlined - it gets too messy in the machine-code. */static void fpop(void);static void fpush(void);static void fxchg(temp_real_unaligned * a, temp_real_unaligned * b);static temp_real_unaligned * __st(int i);static void do_emu(struct info * info){	unsigned short code;	temp_real tmp;	char * address;	if (I387.cwd & I387.swd & 0x3f)		I387.swd |= 0x8000;	else		I387.swd &= 0x7fff;	ORIG_EIP = EIP;/* 0x0007 means user code space */	if (CS != 0x000F) {		printk("math_emulate: %04x:%08x\n\r",CS,EIP);		panic("Math emulation needed in kernel");	}	code = get_fs_word((unsigned short *) EIP);	bswapw(code);	code &= 0x7ff;	I387.fip = EIP;	*(unsigned short *) &I387.fcs = CS;	*(1+(unsigned short *) &I387.fcs) = code;	EIP += 2;	switch (code) {		case 0x1d0: /* fnop */			return;		case 0x1d1: case 0x1d2: case 0x1d3:		case 0x1d4: case 0x1d5: case 0x1d6: case 0x1d7:			math_abort(info,1<<(SIGILL-1));		case 0x1e0:			ST(0).exponent ^= 0x8000;			return;		case 0x1e1:			ST(0).exponent &= 0x7fff;			return;		case 0x1e2: case 0x1e3:			math_abort(info,1<<(SIGILL-1));		case 0x1e4:			ftst(PST(0));			return;		case 0x1e5:			printk("fxam not implemented\n\r");			math_abort(info,1<<(SIGILL-1));		case 0x1e6: case 0x1e7:			math_abort(info,1<<(SIGILL-1));		case 0x1e8:			fpush();			ST(0) = CONST1;			return;		case 0x1e9:			fpush();			ST(0) = CONSTL2T;			return;		case 0x1ea:			fpush();			ST(0) = CONSTL2E;			return;		case 0x1eb:			fpush();			ST(0) = CONSTPI;			return;		case 0x1ec:			fpush();			ST(0) = CONSTLG2;			return;		case 0x1ed:			fpush();			ST(0) = CONSTLN2;			return;		case 0x1ee:			fpush();			ST(0) = CONSTZ;			return;		case 0x1ef:			math_abort(info,1<<(SIGILL-1));		case 0x1f0: case 0x1f1: case 0x1f2: case 0x1f3:		case 0x1f4: case 0x1f5: case 0x1f6: case 0x1f7:		case 0x1f8: case 0x1f9: case 0x1fa: case 0x1fb:		case 0x1fc: case 0x1fd: case 0x1fe: case 0x1ff:			printk("%04x fxxx not implemented\n\r",code + 0xc800);			math_abort(info,1<<(SIGILL-1));		case 0x2e9:			fucom(PST(1),PST(0));			fpop(); fpop();			return;		case 0x3d0: case 0x3d1:			return;		case 0x3e2:			I387.swd &= 0x7f00;			return;		case 0x3e3:			I387.cwd = 0x037f;			I387.swd = 0x0000;			I387.twd = 0x0000;			return;		case 0x3e4:			return;		case 0x6d9:			fcom(PST(1),PST(0));			fpop(); fpop();			return;		case 0x7e0:			*(short *) &EAX = I387.swd;			return;	}	switch (code >> 3) {		case 0x18:			fadd(PST(0),PST(code & 7),&tmp);			real_to_real(&tmp,&ST(0));			return;		case 0x19:			fmul(PST(0),PST(code & 7),&tmp);			real_to_real(&tmp,&ST(0));			return;		case 0x1a:			fcom(PST(code & 7),&tmp);			real_to_real(&tmp,&ST(0));			return;		case 0x1b:			fcom(PST(code & 7),&tmp);			real_to_real(&tmp,&ST(0));			fpop();			return;		case 0x1c:			real_to_real(&ST(code & 7),&tmp);			tmp.exponent ^= 0x8000;			fadd(PST(0),&tmp,&tmp);			real_to_real(&tmp,&ST(0));			return;		case 0x1d:			ST(0).exponent ^= 0x8000;			fadd(PST(0),PST(code & 7),&tmp);			real_to_real(&tmp,&ST(0));			return;		case 0x1e:			fdiv(PST(0),PST(code & 7),&tmp);			real_to_real(&tmp,&ST(0));			return;		case 0x1f:			fdiv(PST(code & 7),PST(0),&tmp);			real_to_real(&tmp,&ST(0));			return;		case 0x38:			fpush();			ST(0) = ST((code & 7)+1);			return;		case 0x39:			fxchg(&ST(0),&ST(code & 7));			return;		case 0x3b:			ST(code & 7) = ST(0);			fpop();			return;		case 0x98:			fadd(PST(0),PST(code & 7),&tmp);			real_to_real(&tmp,&ST(code & 7));			return;		case 0x99:			fmul(PST(0),PST(code & 7),&tmp);			real_to_real(&tmp,&ST(code & 7));			return;		case 0x9a:			fcom(PST(code & 7),PST(0));			return;		case 0x9b:			fcom(PST(code & 7),PST(0));			fpop();			return;					case 0x9c:			ST(code & 7).exponent ^= 0x8000;			fadd(PST(0),PST(code & 7),&tmp);			real_to_real(&tmp,&ST(code & 7));			return;		case 0x9d:			real_to_real(&ST(0),&tmp);			tmp.exponent ^= 0x8000;			fadd(PST(code & 7),&tmp,&tmp);			real_to_real(&tmp,&ST(code & 7));			return;		case 0x9e:			fdiv(PST(0),PST(code & 7),&tmp);			real_to_real(&tmp,&ST(code & 7));			return;		case 0x9f:			fdiv(PST(code & 7),PST(0),&tmp);			real_to_real(&tmp,&ST(code & 7));			return;		case 0xb8:			printk("ffree not implemented\n\r");			math_abort(info,1<<(SIGILL-1));		case 0xb9:			fxchg(&ST(0),&ST(code & 7));			return;		case 0xba:			ST(code & 7) = ST(0);			return;		case 0xbb:			ST(code & 7) = ST(0);			fpop();			return;		case 0xbc:			fucom(PST(code & 7),PST(0));			return;		case 0xbd:			fucom(PST(code & 7),PST(0));			fpop();			return;		case 0xd8:			fadd(PST(code & 7),PST(0),&tmp);			real_to_real(&tmp,&ST(code & 7));			fpop();			return;		case 0xd9:			fmul(PST(code & 7),PST(0),&tmp);			real_to_real(&tmp,&ST(code & 7));			fpop();			return;		case 0xda:			fcom(PST(code & 7),PST(0));			fpop();			return;		case 0xdc:			ST(code & 7).exponent ^= 0x8000;			fadd(PST(0),PST(code & 7),&tmp);			real_to_real(&tmp,&ST(code & 7));			fpop();			return;		case 0xdd:			real_to_real(&ST(0),&tmp);			tmp.exponent ^= 0x8000;			fadd(PST(code & 7),&tmp,&tmp);			real_to_real(&tmp,&ST(code & 7));			fpop();			return;		case 0xde:			fdiv(PST(0),PST(code & 7),&tmp);			real_to_real(&tmp,&ST(code & 7));			fpop();			return;		case 0xdf:			fdiv(PST(code & 7),PST(0),&tmp);			real_to_real(&tmp,&ST(code & 7));			fpop();			return;		case 0xf8:			printk("ffree not implemented\n\r");			math_abort(info,1<<(SIGILL-1));			fpop();			return;		case 0xf9:			fxchg(&ST(0),&ST(code & 7));			return;		case 0xfa:		case 0xfb:			ST(code & 7) = ST(0);			fpop();			return;	}	switch ((code>>3) & 0xe7) {		case 0x22:			put_short_real(PST(0),info,code);			return;		case 0x23:			put_short_real(PST(0),info,code);			fpop();			return;		case 0x24:			address = ea(info,code);			for (code = 0 ; code < 7 ; code++) {				((long *) & I387)[code] =				   get_fs_long((unsigned long *) address);				address += 4;			}			return;		case 0x25:			address = ea(info,code);			*(unsigned short *) &I387.cwd =				get_fs_word((unsigned short *) address);			return;		case 0x26:			address = ea(info,code);			verify_area(address,28);			for (code = 0 ; code < 7 ; code++) {				put_fs_long( ((long *) & I387)[code],					(unsigned long *) address);				address += 4;			}			return;		case 0x27:			address = ea(info,code);			verify_area(address,2);			put_fs_word(I387.cwd,(short *) address);			return;		case 0x62:			put_long_int(PST(0),info,code);			return;		case 0x63:			put_long_int(PST(0),info,code);			fpop();			return;		case 0x65:			fpush();			get_temp_real(&tmp,info,code);			real_to_real(&tmp,&ST(0));			return;		case 0x67:			put_temp_real(PST(0),info,code);			fpop();			return;		case 0xa2:			put_long_real(PST(0),info,code);			return;		case 0xa3:			put_long_real(PST(0),info,code);			fpop();			return;		case 0xa4:			address = ea(info,code);			for (code = 0 ; code < 27 ; code++) {				((long *) & I387)[code] =				   get_fs_long((unsigned long *) address);				address += 4;			}			return;		case 0xa6:			address = ea(info,code);			verify_area(address,108);			for (code = 0 ; code < 27 ; code++) {				put_fs_long( ((long *) & I387)[code],					(unsigned long *) address);				address += 4;			}			I387.cwd = 0x037f;			I387.swd = 0x0000;			I387.twd = 0x0000;			return;		case 0xa7:			address = ea(info,code);			verify_area(address,2);			put_fs_word(I387.swd,(short *) address);			return;		case 0xe2:			put_short_int(PST(0),info,code);			return;		case 0xe3:			put_short_int(PST(0),info,code);			fpop();			return;		case 0xe4:			fpush();			get_BCD(&tmp,info,code);			real_to_real(&tmp,&ST(0));			return;		case 0xe5:			fpush();			get_longlong_int(&tmp,info,code);			real_to_real(&tmp,&ST(0));			return;		case 0xe6:			put_BCD(PST(0),info,code);			fpop();			return;		case 0xe7:			put_longlong_int(PST(0),info,code);			fpop();			return;	}	switch (code >> 9) {		case 0:			get_short_real(&tmp,info,code);			break;		case 1:			get_long_int(&tmp,info,code);			break;		case 2:			get_long_real(&tmp,info,code);			break;		case 4:			get_short_int(&tmp,info,code);	}	switch ((code>>3) & 0x27) {		case 0:			fadd(&tmp,PST(0),&tmp);			real_to_real(&tmp,&ST(0));			return;		case 1:			fmul(&tmp,PST(0),&tmp);			real_to_real(&tmp,&ST(0));			return;		case 2:			fcom(&tmp,PST(0));			return;		case 3:			fcom(&tmp,PST(0));			fpop();			return;		case 4:			tmp.exponent ^= 0x8000;			fadd(&tmp,PST(0),&tmp);			real_to_real(&tmp,&ST(0));			return;		case 5:			ST(0).exponent ^= 0x8000;			fadd(&tmp,PST(0),&tmp);			real_to_real(&tmp,&ST(0));			return;		case 6:			fdiv(PST(0),&tmp,&tmp);			real_to_real(&tmp,&ST(0));			return;		case 7:			fdiv(&tmp,PST(0),&tmp);			real_to_real(&tmp,&ST(0));			return;	}	if ((code & 0x138) == 0x100) {			fpush();			real_to_real(&tmp,&ST(0));			return;	}	printk("Unknown math-insns: %04x:%08x %04x\n\r",CS,EIP,code);	math_abort(info,1<<(SIGFPE-1));}void math_emulate(long ___false){	if (!current->used_math) {		current->used_math = 1;		I387.cwd = 0x037f;		I387.swd = 0x0000;		I387.twd = 0x0000;	}/* &___false points to info->___orig_eip, so subtract 1 to get info */	do_emu((struct info *) ((&___false) - 1));}void __math_abort(struct info * info, unsigned int signal){	EIP = ORIG_EIP;	current->signal |= signal;	__asm__("movl %0,%%esp ; ret"::"g" ((long) info));}static void fpop(void){	unsigned long tmp;	tmp = I387.swd & 0xffffc7ff;	I387.swd += 0x00000800;	I387.swd &= 0x00003800;	I387.swd |= tmp;}static void fpush(void){	unsigned long tmp;	tmp = I387.swd & 0xffffc7ff;	I387.swd += 0x00003800;	I387.swd &= 0x00003800;	I387.swd |= tmp;}static void fxchg(temp_real_unaligned * a, temp_real_unaligned * b){	temp_real_unaligned c;	c = *a;	*a = *b;	*b = c;}static temp_real_unaligned * __st(int i){	i += I387.swd >> 11;	i &= 7;	return (temp_real_unaligned *) (i*10 + (char *)(I387.st_space));}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美高清一级片在线观看| 欧美一区二区久久久| 久久成人免费网| 免费观看在线色综合| 亚洲午夜在线电影| 午夜日韩在线电影| 爽好多水快深点欧美视频| 亚洲国产精品久久不卡毛片| 亚洲国产精品影院| 蜜桃传媒麻豆第一区在线观看| 日本v片在线高清不卡在线观看| 日韩成人一区二区三区在线观看| 三级在线观看一区二区| 欧美aⅴ一区二区三区视频| 蜜桃视频免费观看一区| 国产在线精品一区二区三区不卡 | 免费xxxx性欧美18vr| 日本亚洲电影天堂| 国产一区二区三区四区在线观看| 国产在线一区观看| 91年精品国产| 日韩一区二区三区四区| 精品处破学生在线二十三| 国产午夜精品美女毛片视频| 亚洲少妇屁股交4| 日韩一区欧美二区| 国产精品白丝av| 欧美午夜电影在线播放| 精品少妇一区二区三区视频免付费 | 韩国中文字幕2020精品| av一本久道久久综合久久鬼色| 欧美色图12p| 国产欧美日韩久久| 亚洲精品国产成人久久av盗摄| 天堂蜜桃91精品| 国产福利一区二区三区视频| 91九色02白丝porn| 亚洲精品一区二区三区在线观看| 欧美国产一区在线| 视频一区二区不卡| 一本大道综合伊人精品热热| 日韩午夜激情av| 亚洲狼人国产精品| 国产不卡免费视频| 91精品国产综合久久福利软件| 日韩一区欧美小说| 国产福利一区在线| 日韩一区二区三区电影| 亚洲视频电影在线| 国产精品一二三| 精品国产乱码久久久久久浪潮| 一区二区日韩av| 成人性生交大片免费看中文| 日韩一级片网址| 亚洲一二三四区| 99精品桃花视频在线观看| 日韩精品在线网站| 午夜伊人狠狠久久| 欧美性生活久久| 亚洲制服丝袜av| 色香蕉成人二区免费| 国产精品免费免费| 成人综合在线视频| 久久久美女毛片| 韩国精品主播一区二区在线观看 | 亚洲午夜久久久久久久久电影院| 国产福利91精品一区| 欧美成人女星排行榜| 日韩成人精品视频| 91精品国产手机| 奇米777欧美一区二区| 欧美狂野另类xxxxoooo| 亚洲欧美激情视频在线观看一区二区三区| 国产成人精品一区二区三区四区| 精品欧美一区二区三区精品久久 | 亚洲女人的天堂| 五月天激情小说综合| 欧美videossexotv100| 免费看日韩精品| 日韩一区二区精品葵司在线| 日韩av一区二区三区四区| 欧美精品一二三区| 日本一不卡视频| 久久综合国产精品| 国产精品系列在线观看| 中文字幕精品综合| 色婷婷亚洲婷婷| 亚洲香肠在线观看| 欧美一区二区三区在线视频| 日韩成人一级大片| 久久精品亚洲一区二区三区浴池| 粉嫩aⅴ一区二区三区四区| 1区2区3区国产精品| 色爱区综合激月婷婷| 天堂影院一区二区| 久久久精品天堂| 色婷婷综合五月| 免费在线视频一区| 国产无人区一区二区三区| 99久久99久久综合| 六月丁香婷婷久久| 国产精品色一区二区三区| 91黄色免费看| 精品一区二区三区日韩| 中文字幕日本不卡| 欧美精品粉嫩高潮一区二区| 国产电影精品久久禁18| 亚洲精品免费电影| 精品国产乱码久久| 欧美午夜精品免费| 国产一区二区三区免费看| 亚洲免费av网站| 欧美精品一区二区三区很污很色的| 成人动漫一区二区三区| 日韩极品在线观看| 国产精品高潮呻吟| 91精品国产乱码久久蜜臀| 成+人+亚洲+综合天堂| 日韩电影在线一区二区三区| 欧美激情在线免费观看| 精品久久国产字幕高潮| 色94色欧美sute亚洲线路二| 韩国精品免费视频| 天天av天天翘天天综合网色鬼国产| 国产亚洲女人久久久久毛片| 91精品国产福利| 色婷婷国产精品综合在线观看| 国产美女一区二区| 日本欧美一区二区三区| 一区二区三区在线观看国产| 久久蜜臀中文字幕| 欧美一级在线视频| 欧美日本一区二区| 色屁屁一区二区| 不卡的电影网站| 国产福利电影一区二区三区| 九九**精品视频免费播放| 日日夜夜精品视频免费| 亚洲一区二区三区视频在线| 亚洲免费伊人电影| 国产精品天干天干在线综合| 日本一区二区三级电影在线观看| 欧美一区二区三区免费观看视频 | 日本不卡在线视频| 一区二区三区在线观看欧美 | 欧美一区二区在线免费播放| 一本色道**综合亚洲精品蜜桃冫| 粉嫩aⅴ一区二区三区四区五区| 精品综合久久久久久8888| 日韩激情视频在线观看| 亚洲成va人在线观看| 亚洲综合色成人| 一区二区三区四区av| 亚洲欧美视频在线观看视频| 亚洲男人的天堂一区二区| 最新日韩av在线| 1000部国产精品成人观看| 国产精品人人做人人爽人人添 | 亚洲嫩草精品久久| 亚洲激情图片小说视频| 亚洲成av人片在线| 视频在线观看91| 久久精品国产亚洲高清剧情介绍| 经典三级视频一区| 盗摄精品av一区二区三区| 国产91对白在线观看九色| 91小视频免费观看| 欧美日韩午夜精品| 日韩一区二区三区四区| 久久久久久久综合日本| 1024成人网色www| 亚洲第一激情av| 狠狠网亚洲精品| 国产成人精品三级| 色欧美88888久久久久久影院| 在线观看欧美日本| 欧美一区二区三区在线观看视频| 精品人伦一区二区色婷婷| 国产精品理论片| 香蕉久久一区二区不卡无毒影院 | 91精品中文字幕一区二区三区| 欧美精品久久99久久在免费线| 精品久久久久久久一区二区蜜臀| 国产三级久久久| 一区二区三区在线观看欧美| 精品一区二区在线看| 91热门视频在线观看| 日韩视频在线永久播放| 中文字幕 久热精品 视频在线| 亚洲色图在线播放| 久久国产精品一区二区| 91一区二区在线观看| 日韩精品在线一区| 亚洲一区二区中文在线| 国产在线精品一区二区三区不卡 | 日本二三区不卡| 日韩美女一区二区三区四区| 国产精品看片你懂得| 精品一区二区三区久久| 欧美在线三级电影|