CN106406819B - 一种cpu的指令集兼容方法及其终端 - Google Patents
一种cpu的指令集兼容方法及其终端 Download PDFInfo
- Publication number
- CN106406819B CN106406819B CN201610881343.2A CN201610881343A CN106406819B CN 106406819 B CN106406819 B CN 106406819B CN 201610881343 A CN201610881343 A CN 201610881343A CN 106406819 B CN106406819 B CN 106406819B
- Authority
- CN
- China
- Prior art keywords
- instruction
- ssse3
- application
- memory
- preset
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 65
- 230000002159 abnormal effect Effects 0.000 claims abstract description 73
- 101100285899 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) SSE2 gene Proteins 0.000 claims abstract description 35
- 108010067930 structure-specific endonuclease I Proteins 0.000 claims abstract description 33
- 238000004088 simulation Methods 0.000 claims abstract description 25
- 230000008569 process Effects 0.000 claims description 42
- 230000006870 function Effects 0.000 claims description 41
- 238000012545 processing Methods 0.000 claims description 32
- 238000004458 analytical method Methods 0.000 claims description 11
- 230000001960 triggered effect Effects 0.000 claims description 2
- 230000000694 effects Effects 0.000 description 6
- 230000005856 abnormality Effects 0.000 description 4
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 239000000872 buffer Substances 0.000 description 2
- 230000008878 coupling Effects 0.000 description 2
- 230000002708 enhancing effect Effects 0.000 description 2
- 241000721047 Danaus plexippus Species 0.000 description 1
- 108010001267 Protein Subunits Proteins 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 235000013399 edible fruits Nutrition 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 210000003205 muscle Anatomy 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种CPU的指令集兼容方法及其终端,解决了目前的部分AMD CPU不兼容SSSE3指令集的应用,使得很多应用程序无法运行,而导致的用户体验性低的技术问题。本发明的CPU的指令集兼容方法包括:获取到AMD CPU运行SSSE3指令应用的命令,通过捕获SSSE3指令应用运行后的异常信号;调用预置异常handler函数,并进行异常信号是否为SSSE3指令的判断,若是,则通过预置SSE1指令和预置SSE2指令模拟SSSE3指令,使得SSSE3指令应用成功运行。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种CPU的指令集兼容方法及其终端。
背景技术
AMD CPU是唯一能与Intel抗衡的CPU厂商,应用非常广泛。Intel采用x86,EM64T,MMX,SSE,SSE2,SSE3,SSSE3(Super SSE3),SSE4.1,SSE4.2,AVX指令集。AMD主要是x86,x86-64,SSE、3D-Now!指令集。
SSE(Streaming SIMD Extensions)是英特尔在其计算机芯片Pentium III中引入的指令集,是MMX的超集。AMD后来在Athlon XP中加入了对这个指令集的支持。这个指令集增加了对8个128位寄存器XMM0-XMM7的支持。SSE2是Intel在P4的最初版本中引入的,但是AMD后来在Opteron和Athlon64中也加入了对它的支持。这个指令集添加了对64位双精度浮点数的支持。SSSE3是Intel命名的SSE3指令集的扩充,包含了16个新的不同于SSE3的指令,每一个都能运作于64位元的MMX暂存器或是128位元XXM暂存器之中,SSSE3指令集增强了CPU的多媒体、图形图像处理、多媒体编码、整数运行和Internet等方面的处理能力。现在很多PC和Android手机端的应用很多采用了SSSE3指令集来加强其在多媒体、音视频的动画效果和性能,提升用户体验。但是大部分AMD CPU如主流的速龙系列AMD Athlon(tm)II X4640、AMD Athlon(tm)II X4 641、AMD Athlon(tm)II X4 605e、AMD Athlon(tm)II X2 250、闪龙系列AMD Sempron X2 180和羿龙系列AMD Phenom(tm)II x4 955、A8-7650k并不兼容SSSE3指令集的应用,使得很多应用程序无法运行,从而导致了用户体验性低的技术问题。
发明内容
本发明实施例提供的一种CPU的指令集兼容方法及其终端,解决了目前的部分AMDCPU不兼容SSSE3指令集的应用,使得很多应用程序无法运行,而导致的用户体验性低的技术问题。
本发明实施例提供的一种CPU的指令集兼容方法包括:
获取到AMD CPU运行SSSE3指令应用的命令,通过捕获所述SSSE3指令应用运行后的异常信号;
调用预置异常handler函数,并进行所述异常信号是否为SSSE3指令的判断,若是,则通过预置SSE1指令和预置SSE2指令模拟所述SSSE3指令,使得所述SSSE3指令应用成功运行。
可选地,获取到AMD CPU运行SSSE3指令应用的命令,通过捕获所述SSSE3指令应用运行后的异常信号之前还包括:
进行内核初始化处理,注册所述预置异常handler函数。
可选地,获取到AMD CPU运行SSSE3指令应用的命令,通过捕获所述SSSE3指令应用运行后的异常信号具体包括:
获取到所述AMD CPU运行SSSE3指令应用的命令,通过捕获SSSE3非法指令X86_TRAP_UD;
根据所述SSSE3非法指令X86_TRAP_UD发送所述SSSE3指令应用运行后的异常信号给所述AMD CPU。
可选地,调用预置异常handler函数,并进行所述异常信号是否为SSSE3指令的判断,若是,则通过预置SSE1指令和预置SSE2指令模拟所述SSSE3指令,使得所述SSSE3指令应用成功运行具体包括:
调用预置异常handler函数,添加若干个用于处理所述SSSE3指令的处理指令,并进行所述异常信号是否为所述SSSE3指令,若是,则执行分析当前所述SSSE3指令的指令格式步骤;
所述分析当前所述SSSE3指令的指令格式步骤具体包括:
通过get指令读取源操作数SRC;
判断所述源操作数SRC是存储在寄存器或是内存中,若存储在所述寄存器,则先读取所述寄存器的所述源操作数SRC到内存中;
当读取所述寄存器的所述源操作数SRC到内存中,或若判断所述源操作数SRC是存储在所述内存中,则通过所述预置SSE1指令和所述预置SSE2指令通过内存算法模拟所述SSSE3指令;
将模拟所述SSSE3指令之后的模拟结果写回所述内存或所述寄存器中,使得所述SSSE3指令应用成功运行。
可选地,将模拟所述SSSE3指令之后的模拟结果写回所述内存或所述寄存器中,使得所述SSSE3指令应用成功运行具体包括:
将模拟所述SSSE3指令之后的模拟结果写回所述内存或所述寄存器中;
将所述内存或所述寄存器中的地址进行指向下一条所述处理指令;
根据指向下一条所述处理指令后通过调用预置异常handler函数获取到返回的所述异常信号,进行所述异常信号是否为所述SSSE3指令,若是,则执行所述分析当前所述SSSE3指令的指令格式步骤,直到若干个所述处理指令处理完毕。
本发明实施例提供的一种CPU的指令集兼容终端,包括:
获取捕获单元,用于获取到AMD CPU运行SSSE3指令应用的命令,通过捕获所述SSSE3指令应用运行后的异常信号;
模拟指令单元,用于调用预置异常handler函数,并进行所述异常信号是否为SSSE3指令的判断,若是,则通过预置SSE1指令和预置SSE2指令模拟所述SSSE3指令,使得所述SSSE3指令应用成功运行。
可选地,CPU的指令集兼容终端还包括:
注册单元,用于进行内核初始化处理,注册所述预置异常handler函数。
可选地,获取捕获单元具体包括:
获取捕获子单元,用于获取到所述AMD CPU运行SSSE3指令应用的命令,通过捕获SSSE3非法指令X86_TRAP_UD;
异常信号子单元,用于根据所述SSSE3非法指令X86_TRAP_UD发送所述SSSE3指令应用运行后的异常信号给所述AMD CPU。
可选地,模拟指令单元具体包括:
调用判断子单元,用于调用预置异常handler函数,添加若干个用于处理所述SSSE3指令的处理指令,并进行所述异常信号是否为所述SSSE3指令的判断,若是,则触发格式分析子单元;
所述格式分析子单元具体包括:
源操作数读取模块,用于通过get指令读取源操作数SRC;
判断模块,用于判断所述源操作数SRC是存储在寄存器或是内存中,若存储在所述寄存器,则先读取所述寄存器的所述源操作数SRC到内存中;
内存算法模拟模块,用于当读取所述寄存器的所述源操作数SRC到内存中,或若判断所述源操作数SRC是存储在所述内存中,则通过所述预置SSE1指令和所述预置SSE2指令通过内存算法模拟所述SSSE3指令;
写回模块,用于将模拟所述SSSE3指令之后的模拟结果写回所述内存或所述寄存器中,使得所述SSSE3指令应用成功运行。
可选地,写回模块具体包括:
写回子模块,用于将模拟所述SSSE3指令之后的模拟结果写回所述内存或所述寄存器中;
指向子模块,用于将所述内存或所述寄存器中的地址进行指向下一条所述处理指令;
处理指令执行子模块,用于根据指向下一条所述处理指令后通过调用预置异常handler函数获取到返回的所述异常信号,进行所述异常信号是否为所述SSSE3指令,若是,则触发所述格式分析子单元,直到若干个所述处理指令处理完毕。
从以上技术方案可以看出,本发明实施例具有以下优点:
本发明实施例提供的一种CPU的指令集兼容方法及其终端,通过获取到AMD CPU运行SSSE3指令应用的命令,通过捕获SSSE3指令应用运行后的异常信号;调用预置异常handler函数,并进行异常信号是否为SSSE3指令的判断,若是,则通过预置SSE1指令和预置SSE2指令模拟SSSE3指令,使得SSSE3指令应用成功运行,AMD CPU采用x86指令集处理支持大概20种异常处理,其中X86_TRAP_UD可以捕获SSSE3兼容性问题的异常,进而取出寄存器或者内存中对应的源操作数,通过SSE1和SSE2的指令集模拟执行SSSE3的操作,最终实现AMD CPU对SSSE3的兼容,解决了目前的部分AMDCPU不兼容SSSE3指令集的应用,使得很多应用程序无法运行,而导致的用户体验性低的技术问题。
同时,无需修改上层应用,直接实现AMD CPU对上层应用SSSE3指令的兼容,具有平台通用性,推广AMD CPU上采用SSSE3指令的应用,增强应用多媒体、音视频动画效果和性能稳定性,提升用户体验的有益技术效果。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。
图1为本发明实施例提供的一种CPU的指令集兼容方法的一个实施例的流程示意图;
图2为本发明实施例提供的一种CPU的指令集兼容方法的另一个实施例的流程示意图;
图3为本发明实施例提供的一种CPU的指令集兼容终端的一个实施例的结构示意图;
图4为本发明实施例提供的一种CPU的指令集兼容终端的另一个实施例的结构示意图;
图5为图2实施例的应用例示意图。
具体实施方式
本发明实施例提供的一种CPU的指令集兼容方法及其终端,解决了目前的部分AMDCPU不兼容SSSE3指令集的应用,使得很多应用程序无法运行,而导致的用户体验性低的技术问题。
为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,下面所描述的实施例仅仅是本发明一部分实施例,而非全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
随着用户对多媒体、音视频要求越来越高,越来越多的Android手机和PC应用采用SSE指令,它在高分辨率图像浏览、高质量音频、MPEG2视频的处理上,精度更高和速度更快,而SSSE3指令集在此基础上更是增强了CPU的多媒体、图形图象处理、多媒体编码、整数运算和Internet等方面的处理能力,所以其在应用中被广泛采用,给用户在音视频动画效果上带来更好的用户体验,本发明的应用场景主要有三个方面:一方面是Android手机采用x86指令集,有部分对SSSE3指令并不支持,导致App无法正常运行;另一方面是针对现在越来越多的Android模拟器,运行在PC端,大量的用户使用的是AMD CPU,很多新推出的APP,尤其是一些游戏对多媒体要求非常高,使用的SSSE3指令开发,最终无法通过模拟器在AMD CPU型号的PC端运行;还有一部分是PC端的一些应用采用SSSE3指令,如果用户是AMD CPU很多应用也无法运行。
请参阅图1,本发明实施例提供的一种CPU的指令集兼容方法的一个实施例包括:
101、获取到AMD CPU运行SSSE3指令应用的命令,通过捕获SSSE3指令应用运行后的异常信号;
当需要通过AMD CPU运行SSSE3指令应用,首先获取到AMD CPU运行SSSE3指令应用的命令,通过捕获SSSE3指令应用运行后的异常信号。
102、调用预置异常handler函数,并进行异常信号是否为SSSE3指令的判断,若是,则执行步骤103;
当获取到AMD CPU运行SSSE3指令应用的命令,通过捕获SSSE3指令应用运行后的异常信号之后,需要调用预置异常handler函数,并进行异常信号是否为SSSE3指令的判断,若是,则执行步骤103。
103、通过预置SSE1指令和预置SSE2指令模拟SSSE3指令,使得SSSE3指令应用成功运行。
当判断异常信号是为SSSE3指令,则通过预置SSE1指令和预置SSE2指令模拟SSSE3指令,使得SSSE3指令应用成功运行。
本实施例中,通过获取到AMD CPU运行SSSE3指令应用的命令,通过捕获SSSE3指令应用运行后的异常信号;调用预置异常handler函数,并进行异常信号是否为SSSE3指令的判断,若是,则通过预置SSE1指令和预置SSE2指令模拟SSSE3指令,使得SSSE3指令应用成功运行,AMD CPU采用x86指令集处理支持大概20种异常处理,其中X86_TRAP_UD可以捕获SSSE3兼容性问题的异常,进而取出寄存器或者内存中对应的源操作数,通过SSE1和SSE2的指令集模拟执行SSSE3的操作,最终实现AMD CPU对SSSE3的兼容,解决了目前的部分AMDCPU不兼容SSSE3指令集的应用,使得很多应用程序无法运行,而导致的用户体验性低的技术问题。
上面是对CPU的指令集兼容方法的过程进行的描述,下面将对具体分析当前SSSE3指令的指令格式的过程进行详细的描述,请参阅图2,本发明实施例提供的一种CPU的指令集兼容方法的另一个实施例包括:
201、进行内核初始化处理,注册预置异常handler函数;
当需要通过AMD CPU运行SSSE3指令应用,首先进行内核初始化处理,注册预置异常handler函数。
202、获取到AMD CPU运行SSSE3指令应用的命令,通过捕获SSSE3非法指令X86_TRAP_UD;
当进行内核初始化处理,注册预置异常handler函数之后,需要获取到AMD CPU运行SSSE3指令应用的命令,通过捕获SSSE3非法指令X86_TRAP_UD。
203、根据SSSE3非法指令X86_TRAP_UD发送SSSE3指令应用运行后的异常信号给AMD CPU;
当获取到AMD CPU运行SSSE3指令应用的命令,通过捕获SSSE3非法指令X86_TRAP_UD之后,需要根据SSSE3非法指令X86_TRAP_UD发送SSSE3指令应用运行后的异常信号给AMDCPU。
204、调用预置异常handler函数,添加若干个用于处理SSSE3指令的处理指令,并进行异常信号是否为SSSE3指令的判断,若是,则执行步骤205;
当根据SSSE3非法指令X86_TRAP_UD发送SSSE3指令应用运行后的异常信号给AMDCPU之后,需要调用预置异常handler函数,添加若干个用于处理SSSE3指令的处理指令,并进行异常信号是否为SSSE3指令,若是,则执行步骤205。
205、通过get指令读取源操作数SRC;
当判断异常信号是为SSSE3指令,则通过get指令读取源操作数SRC。
206、判断源操作数SRC是存储在寄存器或是内存中,若存储在寄存器,则先读取寄存器的源操作数SRC到内存中,再执行步骤207,若源操作数SRC是存储在内存中,则执行步骤207;
当通过get指令读取源操作数SRC之后,需要判断源操作数SRC是存储在寄存器或是内存中,若存储在寄存器,则先读取寄存器的源操作数SRC到内存中,再执行步骤207,源操作数SRC是存储在内存中,则执行步骤207。
207、通过预置SSE1指令和预置SSE2指令通过内存算法模拟SSSE3指令;
当读取寄存器的源操作数SRC到内存中,或若判断源操作数SRC是存储在内存中,则通过预置SSE1指令和预置SSE2指令通过内存算法模拟SSSE3指令。
208、将模拟SSSE3指令之后的模拟结果写回内存或寄存器中;
通过预置SSE1指令和预置SSE2指令通过内存算法模拟SSSE3指令之后,需要将模拟SSSE3指令之后的模拟结果写回内存或寄存器中。
209、将ip地址指向下一条指令地址;
当将模拟SSSE3指令之后的模拟结果写回内存或寄存器中之后,需要将内存或寄存器中的地址进行指向下一条处理指令,也就是将ip地址指向下一条指令地址。
210、根据指向下一条处理指令后通过调用预置异常handler函数获取到返回的异常信号,进行异常信号是否为SSSE3指令,若是,则执行分析当前SSSE3指令的指令格式步骤,循环上述异常信号处理步骤进行处理。
当将内存或寄存器中的地址进行指向下一条处理指令之后,需要根据指向下一条处理指令后通过调用预置异常handler函数获取到返回的异常信号,进行异常信号是否为SSSE3指令,若是,则执行分析当前SSSE3指令的指令格式步骤,直到若干个处理指令处理完毕,该直到若干个处理指令处理完毕,可以是循环上述异常信号处理步骤进行处理。
前述的根据指向下一条处理指令后通过调用预置异常handler函数获取到返回的异常信号,进行异常信号是否为SSSE3指令,若是,则执行分析当前SSSE3指令的指令格式步骤,直到若干个处理指令处理完毕可以是对所有处理指令重复执行步骤202到209。
如图5所示,下面以一具体应用例进行描述:
大部分AMD CPU并不支持SSSE3指令集,但是它支持早期的SSE1和SSE2指令集,AMDCPU采用x86指令集处理支持大概20种异常处理,其中X86_TRAP_UD可以捕获SSSE3兼容性问题的异常,进而取出寄存器或者内存中对应的源操作数,通过SSE1和SSE2的指令集模拟执行SSSE3的操作,最终实现AMD CPU对SSSE3的兼容。
X86系列CPU支持大概20种异常,主要有如下:
其中X86_TRAP_UD是非法指令,在linux内核初始化时,会给每一种异常注册一个handler,其中X86_TRAP_UD的handler是do_invalid_op。如果AMD CPU不支持SSSE3指令,而应用开发中采用了SSSE3指令,正常情况下,会导致系统判定其为非法指令X86_TRAP_UD,而do_invalid_op的处理逻辑是给引发非法指令的进程发送一个signal(SIGILL),并没有做相应的处理,进程收到SIGILL后,导致应用奔溃无法运行。本发明是在do_invalid_op中打补丁,判断对应的操作数是存储在寄存器还是内存中,如果是寄存器,则从相应的XMM0-7寄存器中取出源(src寄存器)操作数,如果是内存直接从内存读取其源(src内存)操作数,同时在内存中开辟128字节连续内存空间,采用纯内存算法,运用AMD CPU所支持的SSE1和SSE2指令集模拟执行SSSE3指令操作,再把执行结果设置回目的地(dst寄存器或者内存地址),最后把ip加1指向下一条指令的地址,do_invalid_op执行结束后,将返回到产生异常的下一条指令继续执行,完成对SSSE3指令的执行,实现采用SSSE3指令应用在AMD CPU上正常运行。
如图5,AMD CPU支持SSSE3指令运行的基本步骤如下:
1.在Linux内核初始化,注册异常的handler,其中SSSE3非法指令X86_TRAP_UD的handler函数为do_invalid_op
2.捕获SSSE3非法指令X86_TRAP_UD在AMD CPU上发送的异常信号SINGLL
3.调用函数do_invalid_op,添加16种Case方法,处理SSSE3包含的16个新的不同于SSE3的指令
4.判断当前异常ip下SSSE3指令的操作类型并解析
5.解析的过程主要包含以下三个步骤
A.read_src读取操作数据源,判断数据是存储在寄存器XMM0-7还是内存地址,Copy到开辟128字节的连续内存空间
B.采用AMD CPU支持的SSE1和SSE2指令通过纯内存算法模拟执行相对应的SSSE3指令
C.write_back将处理结果写回源数据内存或者寄存器
6.将ip地址指向下一条指令地址,do_invalid_op执行结束后,将返回到产生异常的下一条指令继续执行。
本实施例中,通过获取到AMD CPU运行SSSE3指令应用的命令,通过捕获SSSE3指令应用运行后的异常信号;调用预置异常handler函数,并进行异常信号是否为SSSE3指令的判断,若是,则通过预置SSE1指令和预置SSE2指令模拟SSSE3指令,使得SSSE3指令应用成功运行,AMD CPU采用x86指令集处理支持大概20种异常处理,其中X86_TRAP_UD可以捕获SSSE3兼容性问题的异常,进而取出寄存器或者内存中对应的源操作数,通过SSE1和SSE2的指令集模拟执行SSSE3的操作,最终实现AMD CPU对SSSE3的兼容,解决了目前的部分AMDCPU不兼容SSSE3指令集的应用,使得很多应用程序无法运行,而导致的用户体验性低的技术问题。
同时,无需修改上层应用,直接实现AMD CPU对上层应用SSSE3指令的兼容,具有平台通用性,推广AMD CPU上采用SSSE3指令的应用,增强应用多媒体、音视频动画效果和性能稳定性,提升用户体验的有益技术效果。
请参阅图3,本发明实施例提供的一种CPU的指令集兼容终端的一个实施例包括:
获取捕获单元301,用于获取到AMD CPU运行SSSE3指令应用的命令,通过捕获SSSE3指令应用运行后的异常信号;
模拟指令单元302,用于调用预置异常handler函数,并进行异常信号是否为SSSE3指令的判断,若是,则通过预置SSE1指令和预置SSE2指令模拟SSSE3指令,使得SSSE3指令应用成功运行。
本实施例中,通过获取捕获单元301获取到AMD CPU运行SSSE3指令应用的命令,通过捕获SSSE3指令应用运行后的异常信号;模拟指令单元302调用预置异常handler函数,并进行异常信号是否为SSSE3指令的判断,若是,则通过预置SSE1指令和预置SSE2指令模拟SSSE3指令,使得SSSE3指令应用成功运行,AMD CPU采用x86指令集处理支持大概20种异常处理,其中X86_TRAP_UD可以捕获SSSE3兼容性问题的异常,进而取出寄存器或者内存中对应的源操作数,通过SSE1和SSE2的指令集模拟执行SSSE3的操作,最终实现AMD CPU对SSSE3的兼容,解决了目前的部分AMD CPU不兼容SSSE3指令集的应用,使得很多应用程序无法运行,而导致的用户体验性低的技术问题。
上面是对CPU的指令集兼容终端的各单元进行的描述,下面将对子单元、模块、子模块进行详细的描述,请参阅图4,本发明实施例提供的一种CPU的指令集兼容终端的另一个实施例包括:
注册单元401,用于进行内核初始化处理,注册预置异常handler函数。
获取捕获单元402,用于获取到AMD CPU运行SSSE3指令应用的命令,通过捕获SSSE3指令应用运行后的异常信号;
获取捕获单元402具体包括:
获取捕获子单元4021,用于获取到AMD CPU运行SSSE3指令应用的命令,通过捕获SSSE3非法指令X86_TRAP_UD;
异常信号子单元4022,用于根据SSSE3非法指令X86_TRAP_UD发送SSSE3指令应用运行后的异常信号给AMD CPU。
模拟指令单元403,用于调用预置异常handler函数,并进行异常信号是否为SSSE3指令的判断,若是,则通过预置SSE1指令和预置SSE2指令模拟SSSE3指令,使得SSSE3指令应用成功运行。
模拟指令单元403具体包括:
调用判断子单元4031,用于调用预置异常handler函数,添加若干个用于处理SSSE3指令的处理指令,并进行所述异常信号是否为SSSE3指令的判断,若是,则触发格式分析子单元4032;
触发格式分析子单元4032具体包括:
源操作数读取模块40321,用于通过get指令读取源操作数SRC;
判断模块40322,用于判断源操作数SRC是存储在寄存器或是内存中,若存储在寄存器,则先读取寄存器的源操作数SRC到内存中;
内存算法模拟模块40323,用于当读取寄存器的源操作数SRC到内存中,或若判断源操作数SRC是存储在内存中,则通过预置SSE1指令和预置SSE2指令通过内存算法模拟SSSE3指令;
写回模块40324,用于将模拟SSSE3指令之后的模拟结果写回内存或寄存器中,使得SSSE3指令应用成功运行。
写回模块40324具体包括:
写回子模块40324a,用于将模拟SSSE3指令之后的模拟结果写回内存或寄存器中;
指向子模块40324b,用于将内存或寄存器中的地址进行指向下一条处理指令;
处理指令执行子模块40324c,用于根据指向下一条处理指令后通过调用预置异常handler函数获取到返回的异常信号,进行异常信号是否为SSSE3指令,若是,则触发格式分析子单元4032,直到若干个处理指令处理完毕。
本实施例中,通过获取捕获单元402获取到AMD CPU运行SSSE3指令应用的命令,通过捕获SSSE3指令应用运行后的异常信号;模拟指令单元403调用预置异常handler函数,并进行异常信号是否为SSSE3指令的判断,若是,则通过预置SSE1指令和预置SSE2指令模拟SSSE3指令,使得SSSE3指令应用成功运行,AMD CPU采用x86指令集处理支持大概20种异常处理,其中X86_TRAP_UD可以捕获SSSE3兼容性问题的异常,进而取出寄存器或者内存中对应的源操作数,通过SSE1和SSE2的指令集模拟执行SSSE3的操作,最终实现AMD CPU对SSSE3的兼容,解决了目前的部分AMD CPU不兼容SSSE3指令集的应用,使得很多应用程序无法运行,而导致的用户体验性低的技术问题。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (8)
1.一种CPU的指令集兼容方法,其特征在于,包括:
获取到AMD CPU运行SSSE3指令应用的命令,通过捕获所述SSSE3指令应用运行后的异常信号;
调用预置异常handler函数,并进行所述异常信号是否为SSSE3指令的判断,若是,则通过预置SSE1指令和预置SSE2指令模拟所述SSSE3指令,使得所述SSSE3指令应用成功运行;
调用预置异常handler函数,并进行所述异常信号是否为SSSE3指令的判断,若是,则通过预置SSE1指令和预置SSE2指令模拟所述SSSE3指令,使得所述SSSE3指令应用成功运行具体包括:
调用预置异常handler函数,添加若干个用于处理所述SSSE3指令的处理指令,并进行所述异常信号是否为所述SSSE3指令的判断,若是,则执行分析当前所述SSSE3指令的指令格式步骤;
所述分析当前所述SSSE3指令的指令格式步骤具体包括:
通过get指令读取源操作数SRC;
判断所述源操作数SRC是存储在寄存器或是内存中,若存储在所述寄存器,则先读取所述寄存器的所述源操作数SRC到内存中;
当读取所述寄存器的所述源操作数SRC到内存中,或若判断所述源操作数SRC是存储在所述内存中,则通过所述预置SSE1指令和所述预置SSE2指令通过内存算法模拟所述SSSE3指令;
将模拟所述SSSE3指令之后的模拟结果写回所述内存或所述寄存器中,使得所述SSSE3指令应用成功运行。
2.根据权利要求1所述的CPU的指令集兼容方法,其特征在于,获取到AMD CPU运行SSSE3指令应用的命令,通过捕获所述SSSE3指令应用运行后的异常信号之前还包括:
进行内核初始化处理,注册所述预置异常handler函数。
3.根据权利要求1所述的CPU的指令集兼容方法,其特征在于,获取到AMD CPU运行SSSE3指令应用的命令,通过捕获所述SSSE3指令应用运行后的异常信号具体包括:
获取到所述AMD CPU运行SSSE3指令应用的命令,通过捕获SSSE3非法指令X86_TRAP_UD;
根据所述SSSE3非法指令X86_TRAP_UD发送所述SSSE3指令应用运行后的异常信号给所述AMD CPU。
4.根据权利要求1所述的CPU的指令集兼容方法,其特征在于,将模拟所述SSSE3指令之后的模拟结果写回所述内存或所述寄存器中,使得所述SSSE3指令应用成功运行具体包括:
将模拟所述SSSE3指令之后的模拟结果写回所述内存或所述寄存器中;
将所述内存或所述寄存器中的地址进行指向下一条所述处理指令;
根据指向下一条所述处理指令后通过调用预置异常handler函数获取到返回的所述异常信号,进行所述异常信号是否为所述SSSE3指令的判断,若是,则执行所述分析当前所述SSSE3指令的指令格式步骤,直到若干个所述处理指令处理完毕。
5.一种CPU的指令集兼容终端,其特征在于,包括:
获取捕获单元,用于获取到AMD CPU运行SSSE3指令应用的命令,通过捕获所述SSSE3指令应用运行后的异常信号;
模拟指令单元,用于调用预置异常handler函数,并进行所述异常信号是否为SSSE3指令的判断,若是,则通过预置SSE1指令和预置SSE2指令模拟所述SSSE3指令,使得所述SSSE3指令应用成功运行;
模拟指令单元具体包括:
调用判断子单元,用于调用预置异常handler函数,添加若干个用于处理所述SSSE3指令的处理指令,并进行所述异常信号是否为所述SSSE3指令的判断,若是,则触发格式分析子单元;
所述格式分析子单元具体包括:
源操作数读取模块,用于通过get指令读取源操作数SRC;
判断模块,用于判断所述源操作数SRC是存储在寄存器或是内存中,若存储在所述寄存器,则先读取所述寄存器的所述源操作数SRC到内存中;
内存算法模拟模块,用于当读取所述寄存器的所述源操作数SRC到内存中,或若判断所述源操作数SRC是存储在所述内存中,则通过所述预置SSE1指令和所述预置SSE2指令通过内存算法模拟所述SSSE3指令;
写回模块,用于将模拟所述SSSE3指令之后的模拟结果写回所述内存或所述寄存器中,使得所述SSSE3指令应用成功运行。
6.根据权利要求5所述的CPU的指令集兼容终端,其特征在于,CPU的指令集兼容终端还包括:
注册单元,用于进行内核初始化处理,注册所述预置异常handler函数。
7.根据权利要求5所述的CPU的指令集兼容终端,其特征在于,获取捕获单元具体包括:
获取捕获子单元,用于获取到所述AMD CPU运行SSSE3指令应用的命令,通过捕获SSSE3非法指令X86_TRAP_UD;
异常信号子单元,用于根据所述SSSE3非法指令X86_TRAP_UD发送所述SSSE3指令应用运行后的异常信号给所述AMD CPU。
8.根据权利要求5所述的CPU的指令集兼容终端,其特征在于,写回模块具体包括:
写回子模块,用于将模拟所述SSSE3指令之后的模拟结果写回所述内存或所述寄存器中;
指向子模块,用于将所述内存或所述寄存器中的地址进行指向下一条所述处理指令;
处理指令执行子模块,用于根据指向下一条所述处理指令后通过调用预置异常handler函数获取到返回的所述异常信号,进行所述异常信号是否为所述SSSE3指令的判断,若是,则触发所述格式分析子单元,直到若干个所述处理指令处理完毕。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610881343.2A CN106406819B (zh) | 2016-09-30 | 2016-09-30 | 一种cpu的指令集兼容方法及其终端 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610881343.2A CN106406819B (zh) | 2016-09-30 | 2016-09-30 | 一种cpu的指令集兼容方法及其终端 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106406819A CN106406819A (zh) | 2017-02-15 |
CN106406819B true CN106406819B (zh) | 2019-01-01 |
Family
ID=59229040
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610881343.2A Active CN106406819B (zh) | 2016-09-30 | 2016-09-30 | 一种cpu的指令集兼容方法及其终端 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106406819B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109426528A (zh) * | 2017-09-05 | 2019-03-05 | 东软集团股份有限公司 | 实现软件版本选择的方法、装置及存储介质、程序产品 |
CN109189475B (zh) * | 2018-08-16 | 2022-06-10 | 北京算能科技有限公司 | 可编程人工智能加速器指令集的构建方法 |
CN112486570B (zh) * | 2020-11-06 | 2023-06-02 | 麒麟软件有限公司 | 一种不同类型CPU的Glibc兼容方法 |
CN115480872B (zh) * | 2022-09-14 | 2023-04-28 | 北京计算机技术及应用研究所 | 一种dsp c2812处理器指令集虚拟化仿真方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101095105A (zh) * | 2004-12-30 | 2007-12-26 | 英特尔公司 | 从混合源指令集架构到单一目标指令集架构的二进制代码转换中的多格式指令的格式选择 |
CN101382906A (zh) * | 2007-09-06 | 2009-03-11 | 戴尔产品有限公司 | 处理器架构之间的虚拟机迁移 |
CN101739238A (zh) * | 2010-01-14 | 2010-06-16 | 上海交通大学 | 针对sse2指令的二进制浮点翻译方法 |
US20150156057A1 (en) * | 2013-12-02 | 2015-06-04 | John C. Leung | Executable-Based Platform Selection |
-
2016
- 2016-09-30 CN CN201610881343.2A patent/CN106406819B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101095105A (zh) * | 2004-12-30 | 2007-12-26 | 英特尔公司 | 从混合源指令集架构到单一目标指令集架构的二进制代码转换中的多格式指令的格式选择 |
CN101382906A (zh) * | 2007-09-06 | 2009-03-11 | 戴尔产品有限公司 | 处理器架构之间的虚拟机迁移 |
CN101739238A (zh) * | 2010-01-14 | 2010-06-16 | 上海交通大学 | 针对sse2指令的二进制浮点翻译方法 |
US20150156057A1 (en) * | 2013-12-02 | 2015-06-04 | John C. Leung | Executable-Based Platform Selection |
Non-Patent Citations (2)
Title |
---|
SIMD指令集技术在优化MPEG-2码流处理的研究;徐章宁等;《微计算机信息》;20101231;第26卷(第23期);第153-155页 |
SSE Implementation of Multivariate PKCs on Modern x86 CPUs;Chen等;《International Workshop on Cryptographic Hardware and Embedded Systems》;20091231;第33-48页 |
Also Published As
Publication number | Publication date |
---|---|
CN106406819A (zh) | 2017-02-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106406819B (zh) | 一种cpu的指令集兼容方法及其终端 | |
JP6207605B2 (ja) | 状態機械エンジンをプログラミングするための方法およびデバイス | |
CN106506525B (zh) | 用于在浏览器上播放视频流的方法及装置 | |
JP6154824B2 (ja) | ステートマシンラチスにおけるブール型論理 | |
CN104991775B (zh) | 一种游戏加速方法和装置 | |
JP6109186B2 (ja) | 状態機械格子におけるカウンタ動作 | |
CN103425491B (zh) | 一种游戏引擎 | |
WO2018058811A1 (zh) | 虚拟现实场景加载方法及设备 | |
KR102165134B1 (ko) | 상태 기계 엔진에서 상태 벡터 데이터를 사용하기 위한 방법들 및 시스템들 | |
CN106507161A (zh) | 视频直播方法及直播装置 | |
US11275661B1 (en) | Test generation of a distributed system | |
CN107423049A (zh) | 实现在线编程的方法、浏览器和终端设备 | |
KR20140073553A (ko) | Fifo 로드 명령 | |
JP2003323239A5 (zh) | ||
CN105354040A (zh) | 双引擎游戏内置工具栏的方法、装置及终端 | |
US20210158131A1 (en) | Hierarchical partitioning of operators | |
US9710575B2 (en) | Hybrid platform-dependent simulation interface | |
CN114008635A (zh) | 神经网络逐层调试 | |
CN105577828B (zh) | 一种远程重定向方法和装置 | |
WO2022025357A1 (ko) | 프로그래밍 교육을 위한 블록 코딩 처리 방법 | |
CN107766438A (zh) | 基于html5将网页输入音频生成口型gif的方法、装置和系统 | |
CN107610205A (zh) | 基于html5将网页输入音频生成口型动画的方法、装置和系统 | |
CN115588458A (zh) | 存储设备测试方法、系统、设备和可读存储介质 | |
CN110400560A (zh) | 数据处理方法及装置、存储介质、电子装置 | |
CN114359464A (zh) | 一种基于glsl es的图像渲染方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |