微处理器、用以处理微处理器的储存宏指令的方法.pdf

上传人:00062****4422 文档编号:998528 上传时间:2018-03-24 格式:PDF 页数:40 大小:1.88MB
返回 下载 相关 举报
摘要
申请专利号:

CN200910169419.9

申请日:

2009.08.31

公开号:

CN101655781A

公开日:

2010.02.24

当前法律状态:

授权

有效性:

有权

法律详情:

授权|||实质审查的生效IPC(主分类):G06F 9/06申请日:20090831|||公开

IPC分类号:

G06F9/06; G06F9/22; G06F9/30

主分类号:

G06F9/06

申请人:

威盛电子股份有限公司

发明人:

吉拉德·M.卡尔; 罗德尼·E.虎克; G.葛兰·亨利; 泰瑞·派克斯

地址:

中国台湾台北县

优先权:

2008.9.18 US 12/233,261

专利代理机构:

北京林达刘知识产权代理事务所

代理人:

刘新宇;王 璐

PDF下载: PDF下载
内容摘要

本发明提供一种微处理器、用以处理微处理器的储存宏指令的方法,该微处理器包括一指令转译器、一重排序缓冲器及一指令分派器。指令转译器用以将一储存宏指令转译成一融合储存微指令。重排序缓冲器包括多个登录地址,且用以接收来自该指令转译器的该融合储存微指令至所述登录地址的其中之一。指令分派器用以根据接收的该融合储存微指令,分派一储存地址微指令及一储存数据微指令至该微处理器的多个执行单元以供执行,其中,该储存地址微指令及该储存数据微指令皆未占据该重排序缓冲器的任何登录地址。本发明不仅可使通用目的暂存器

权利要求书

1: 一种微处理器,其特征在于,具有包括一宏指令集的一 宏结构及包括一微指令集的一微结构,该微处理器包括: 一指令转译器,用以将一储存宏指令转译成一融合储存微 指令,其中,该储存宏指令为该宏指令集的一宏指令,且该储 存宏指令用以指示该微处理器将数据由该微处理器的一通用目 的暂存器储存至一存储器位置;该融合储存微指令为该微指令 集中的一微指令; 一重排序缓冲器,包括多个登录地址,且该重排序缓冲器 用以接收来自该指令转译器的该融合储存微指令至所述登录地 址的其中之一;以及 一指令分派器,用以根据接收的该融合储存微指令分派一 储存地址微指令及一储存数据微指令至该微处理器的多个执行 单元以供执行,其中,该储存地址微指令及该储存数据微指令 皆未占据该重排序缓冲器的任何登录地址; 其中,当该储存地址微指令及该储存数据微指令皆被执行 后,该重排序缓冲器还将该融合储存微指令撤出。
2: 根据权利要求1所述的微处理器,其特征在于,还包括: 一储存地址单元,用以接收并执行由该指令分派器分派的 该储存地址微指令,并于执行该储存地址微指令后告知该重排 序缓冲器;以及 一储存数据单元,用以接收并执行由该指令分派器分派的 该储存数据微指令,并于执行该储存数据微指令后告知该重排 序缓冲器。
3: 根据权利要求2所述的微处理器,其特征在于,该储存 数据单元根据该储存数据微指令指定的一通用目的暂存器,将 该通用目的暂存器的数据储存至该微处理器的一储存缓冲器。
4: 根据权利要求3所述的微处理器,其特征在于,该储存 地址单元根据该储存地址微指令指定的两通用目的暂存器计算 该存储器位置的一地址,且将该地址写入该储存缓冲器,其中, 该存储器位置的该地址由该储存宏指令所指定。
5: 根据权利要求1所述的微处理器,其特征在于,该融合 储存微指令包括一第一起始栏、一第二起始栏及一第三起始栏, 其中,该指令转译器用以将用来指定一第一通用目的暂存器的 值存于该第三起始栏,该第一通用目的暂存器用以提供该微处 理器储存于该存储器位置的数据;该指令转译器还将用来指定 一第二通用目的暂存器的值及一第三通用目的暂存器的值分别 存于该第一起始栏及该第二起始栏,该第二通用目的暂存器及 该第三通用目的暂存器由该储存宏指令的起始运算元所指定, 且该储存宏指令的起始运算元用来产生该存储器位置的一地 址。
6: 根据权利要求5所述的微处理器,其特征在于,该指令 分派器用以将储存于该融合储存微指令的第一起始栏内的值及 第二起始栏内的值填入至该储存地址微指令的一第一起始栏及 一第二起始栏;该指令分派器还用以将储存于该融合储存微指 令的第三起始栏内的值填入至该储存数据微指令的一第一起始 栏。
7: 根据权利要求1所述的微处理器,其特征在于,还包括 一通用目的暂存器集,其中,该微指令集的所述微指令能由该 通用目的暂存器集的两暂存器中分别读取由所述微指令的一第 一起始栏及一第二起始栏所指定的起始运算元;该微指令集的 所述微指令不能由该通用目的暂存器集的所述暂存器中读取由 所述微指令的一第三起始栏所指定的起始运算元。
8: 根据权利要求1所述的微处理器,其特征在于,该重排 序缓冲器的每一登录地址包括一储存地址完成旗标以及一储存 数据完成旗标,该储存地址完成旗标及该储存数据完成旗标分 别用以指示该储存地址微指令及该储存数据微指令已被执行。
9: 一种用以处理微处理器的储存宏指令的方法,其特征在 于,该微处理器具有包括一宏指令集的一宏结构及包括一微指 令集的一微结构,该方法包括: 将该储存宏指令转译成一融合储存微指令,其中,该储存 宏指令为该宏指令集的一宏指令,且该储存宏指令用以指示该 微处理器将数据由该微处理器的一通用目的暂存器储存至一存 储器位置;该融合储存微指令为该微指令集中的一微指令; 接收来自一指令转译器的该融合储存微指令至一重排序缓 冲器的多个登录地址的其中之一; 根据接收的该融合储存微指令分派一储存地址微指令及一 储存数据微指令至该微处理器的多个执行单元以供执行,其中, 该储存地址微指令及该储存数据微指令皆未占据该重排序缓冲 器的任何登录地址;以及 当该储存地址微指令及该储存数据微指令皆被执行后,将 该融合储存微指令撤出。
10: 根据权利要求9所述的用以处理微处理器的储存宏指令 的方法,其特征在于,还包括: 于一储存地址单元接收并执行由该指令分派器分派的该储 存地址微指令,并于执行该储存地址微指令后告知该重排序缓 冲器;以及 于一储存数据单元接收并执行由该指令分派器分派的该储 存数据微指令,并于执行该储存数据微指令后告知该重排序缓 冲器。
11: 根据权利要求10所述的用以处理微处理器的储存宏指 令的方法,其特征在于,该储存数据单元执行该储存数据微指 令的步骤包括:根据该储存数据微指令指定的一通用目的暂存 器,将该通用目的暂存器的数据储存至该微处理器的一储存缓 冲器。
12: 根据权利要求11所述的用以处理微处理器的储存宏指 令的方法,其特征在于,该储存地址单元执行该储存数据微指 令的步骤包括:根据该储存地址微指令指定的两通用目的暂存 器计算该存储器位置的一地址,且将该地址写入该储存缓冲器, 其中,该存储器位置的该地址由该储存宏指令所指定。
13: 根据权利要求9所述的用以处理微处理器的储存宏指令 的方法,其特征在于,该融合储存微指令包括一第一起始栏、 一第二起始栏及一第三起始栏,该方法还包括: 将用来指定一第一通用目的暂存器的值储存于该第三起始 栏,该第一通用目的暂存器用以提供该微处理器储存于该存储 器位置的数据;以及 将用来指定一第二通用目的暂存器的值及一第三通用目的 暂存器的值分别储存于该第一起始栏及该第二起始栏,该第二 通用目的暂存器及该第三通用目的暂存器由该储存宏指令的起 始运算元所指定,且该储存宏指令的起始运算元用来产生该存 储器位置的该地址; 其中,储存该第一通用目的暂存器的值、该第二通用目的 暂存器的值及该第三通用目的暂存器的值的动作由该指令转译 器所执行。
14: 根据权利要求13所述的用以处理微处理器的储存宏指 令的方法,其特征在于,还包括: 将储存于该融合储存微指令的第一起始栏内的值及第二起 始栏内的值分别填入至该储存地址微指令的一第一起始栏及一 第二起始栏;以及 将储存于该融合储存微指令的第三起始栏内的值填入至该 储存数据微指令的一第一起始栏; 其中,填入储存于该融合储存微指令的第一起始栏内的值、 第二起始栏内的值及第三起始栏内的值的动作由该指令分派器 所执行。
15: 根据权利要求9所述的用以处理微处理器的储存宏指令 的方法,其特征在于,该微处理器还包括一通用目的暂存器集, 其中,该微指令集的所述微指令能由该通用目的暂存器集的两 暂存器中分别读取由所述微指令的一第一起始栏及一第二起始 栏所指定的起始运算元;该微指令集的所述微指令不能由该通 用目的暂存器集的所述暂存器中读取由所述微指令的一第三起 始栏所指定的起始运算元。
16: 根据权利要求9所述的用以处理微处理器的储存宏指令 的方法,其特征在于,该重排序缓冲器的每一登录地址包括一 储存地址完成旗标以及一储存数据完成旗标,分别用以指示该 储存地址微指令及该储存数据微指令已被执行。

说明书


微处理器、用以处理微处理器的储存宏指令的方法

    【技术领域】

    本发明有关于一种微处理器,特别有关于一种超标量乱序执行(superscalar out-of-order execution)微处理器。

    背景技术

    通常来说,微处理器都配备有复杂的宏结构(macroarchitecture)来使用内部各式各样不同的微结构(microarchitecture),其中,宏结构通常指的是复杂指令集(complicatedinstruction set computer,CISC)宏结构,例如x86宏结构;而微结构通常指的是精简指令集(reduced instruction setcomputer,RISC)微结构。此种微处理器会将程序所设定的宏指令集(macro instruction set)的每一宏指令(macro instruction)转译成一或多个较简单的微指令(micro instruction),利用这些微指令在微处理器中进行构成宏指令的必要运算以完成宏指令的语义(semantic)。

    程序中常被用到的宏指令类型为储存宏指令(store macroinstruction),储存宏指令用以指示微处理器将数据由微处理器的一暂存器储存至一存储器位置,而存储器位置由储存宏指令所指定。举例来说,x86宏结构中的搬移(MOV)宏指令就是一个储存宏指令,例如MOV[AX+BX],CX这个指令所代表的意义就是命令微处理器将位于暂存器CX中的数据移至一个存储器位置,此存储器位置的地址由暂存器AX与暂存器BX的加总所指定。由于储存宏指令常被程序使用,因此,如何使微处理器可以更快速地执行储存宏指令就成了值得改进的课题。

    【发明内容】

    有鉴于此,本发明提供一种可以更快速地执行储存宏指令的微处理器。

    本发明提供一种微处理器,该微处理器具有包括一宏指令集的一宏结构及包括一微指令集的一微结构,该微处理器包括一指令转译器(instruction translator)、一重排序缓冲器(reorderbuffer,ROB)及一指令分派器(instruction dispatcher)。指令转译器用以将一储存宏指令转译成一融合储存微指令(fusedstore micro instruction),其中,该储存宏指令为该宏指令集的一宏指令,且该储存宏指令用以指示该微处理器将数据由该微处理器的一通用目的暂存器(general purpose register)储存至一存储器位置;该融合储存微指令为该微指令集中的一微指令。重排序缓冲器包括多个登录地址(entry),且该重排序缓冲器用以接收来自该指令转译器的该融合储存微指令至所述登录地址的其中之一。指令分派器用以根据接收的该融合储存微指令,分派(dispatch)一储存地址微指令(store address microinstruction)及一储存数据微指令(store data micro instruction)至该微处理器的多个执行单元以供执行,其中,该储存地址微指令及该储存数据微指令皆未占据该重排序缓冲器的任何登录地址。其中,当该储存地址微指令及该储存数据微指令皆被执行后,该重排序缓冲器更将该融合储存微指令撤出(retire)。

    本发明提供一种用以处理一微处理器的一储存宏指令的方法,该微处理器具有包括一宏指令集的一宏结构及包括一微指令集的一微结构,该方法包括:将该储存宏指令转译成一融合储存微指令,其中,该储存宏指令为该宏指令集的一宏指令,且该储存宏指令用以指示该微处理器将数据由该微处理器的一通用目的暂存器储存至一存储器位置,该融合储存微指令为该微指令集中的一微指令;接收来自一指令转译器的该融合储存微指令至一重排序缓冲器的多个登录地址的其中之一;根据接收的该融合储存微指令,分派一储存地址微指令及一储存数据微指令至该微处理器的多个执行单元以供执行,其中,该储存地址微指令及该储存数据微指令皆未占据该重排序缓冲器的任何登录地址;以及,当该储存地址微指令及该储存数据微指令皆被执行后,将该融合储存微指令撤出。

    本发明不仅可使通用目的暂存器集的尺寸缩小、速度加快、功耗降低,还增加了微处理器的预看能力,同时执行单元的利用率也得以提高。

    【附图说明】

    图1显示本发明的一微处理器的方块图。

    图2显示图1中的微处理器的多个执行单元内包含七个执行单元的方块图。

    图3a显示本发明的融合储存微指令的方块图。

    图3b显示本发明的储存地址微指令的方块图。

    图3c显示本发明的储存数据微指令的方块图。

    图3d显示一储存宏指令的方块图。

    图4显示图1所示的重排序缓冲器的一登录地址的方块图。

    图5显示本发明的图1所示的微处理器的部分结构执行图3d所示地储存宏指令的方块图。

    图6显示本发明的图1的微处理器执行图3d的储存宏指令时的运算元移动情况的方块图。

    图7显示本发明的图1的微处理器通过将图3d所示的储存宏指令转译成图3a所示的融合储存微指令,以执行该储存宏指令的流程图。

    图8a显示现有微处理器的重排序缓冲器内的多个微指令的示意图。

    图8b显示本发明图1所示的重排序缓冲器内的多个微指令的示意图。

    图9a显示现有的指令转译器的操作方式的示意图。

    图9b显示本发明的图1的指令转译器的操作方式的示意图。

    图10显示本发明的微处理器将x86宏指令转译成微指令序列的示意图。

    【具体实施方式】

    为使本发明的上述目的、特征和优点能更明显易懂,下文特举一较佳实施例,并配合所附图式,作详细说明如下。

    请参考图1,图1显示根据本发明的一微处理器100的方块图。微处理器100包括一指令转译器108、耦接至指令转译器108的一暂存器配置表(register allocation table,RAT)116、耦接至暂存器配置表116的一指令分派器118、耦接至指令分派器118的多个执行单元(execution units)124、耦接至所述多个执行单元124的通用目的暂存器集(general purpose register,GPRs)142、耦接至暂存器配置表116、指令分派器118及所述多个执行单元124的一重排序缓冲器(reorder buffer,ROB)128,以及耦接至暂存器配置表116、指令分派器118及所述多个执行单元124的一存储器子系统(memory subsystem)132。存储器子系统132包括用以快取系统存储器(system memory)的数据的一快取存储器(cache memory)138。快取存储器138可包括分离的一指令快取(instruction cache)及一数据快取(data cache),或者包括单一联合快取存储器(single unified cache memory),或者包括前述两者。快取存储器138可包括一阶层式(hierarchy)的存储器,例如一或多个L1快取(level-1 cache)及一个L2快取(level-2 cache)。存储器子系统132还包括多个储存缓冲器(store buffers)134及多个载入缓冲器(load buffers)136,其中,储存缓冲器134用来缓冲被写入存储器(例如快取存储器138)的数据,而载入缓冲器136用来缓冲从存储器(例如快取存储器138)读取的数据。

    微处理器100为一超标量处理器(superscalar processor),因为微处理器100在每一时脉中可发出多个微指令给所述执行单元124。此外,微处理器100亦为一乱序执行处理器(out-of-order execution processor),因为所述执行单元124(不管是全体的或个别的)被允许用不同于对应的宏指令的程序顺序来执行它们各自的微指令。微处理器100包括分离的一宏结构及一微结构。在一实施例中,微处理器100的宏结构为一x86宏结构。当一个微处理器可以正确地执行被设计为在一x86微处理器中所执行的多个应用程序时,我们称此微处理器具有一x86宏结构,而判断一个应用程序是否被正确执行的方式是看所预期的结果是否达到。特别要注意的是,微处理器100可执行IA-32指令集(IA-32 instruction set)的指令,而且微处理器100包括有IA-32使用者可见暂存器集(IA-32 user-visible register set)。在一实施例中,所述通用目的暂存器集142是一包含多个暂存器的暂存器集(register set),且被配置(configured)成一个微指令可以在一个时脉中从所述通用目的暂存器集142中读取两个起始运算元(source operands)。在另一实施例中,所述通用目的暂存器集142包括x86结构的通用目的暂存器集,例如EAX、EBX、ECX、EDX、ESI、EDI、ESP、EBP等,或者是介质指令相关暂存器(media instruction-related registers),例如MMX及XMM暂存器集。在一实施例中,微指令集内的微指令可由所述通用目的暂存器集142的两暂存器中,各别读取由所述微指令的一第一起始栏(source operand field)及一第二起始栏所指定的起始运算元,例如图3b所示的起始栏(source field)A 340及起始栏B 344,或图3c所示的起始栏A 360及起始栏B 364。然而,微指令集内的微指令不可由所述通用目的暂存器集142的所述暂存器中读取由所述微指令的一第三起始栏所指定的一起始运算元,例如图3b所示的起始栏C 348或图3c所示的起始栏C 368。然而,其它暂存器,例如x86EFLAGS暂存器,可由第三起始栏指定,而在同一时脉里第一起始栏及第二起始栏所指定的通用目的暂存器集142中的两个暂存器被读取。然而,在另一实施例中,一种特别的微指令并未使用一或多个第一起始栏及第二起始栏,此微处理器100包括特别逻辑(special logic)单元以使微指令可以从所述通用目的暂存器集142的暂存器中读取由该微指令的第三起始栏所指定的一起始运算元,例如图3c所示的起始栏C 368。在一些实施例中,由于微指令集内的微指令只能由所述通用目的暂存器集142的两暂存器中读取起始运算元,所以所述通用目的暂存器集142的读取端口(read port)的数目相对应地被减少了,如此使得所述通用目的暂存器集142的尺寸可被缩小,速度可加快,功率消耗也可被减低,而且相关的导线连接也变简单了。

    指令转译器108接收由快取存储器138的一指令快取所传来的宏指令104(例如图3d所示的储存宏指令394),然后对应地将每一宏指令104转译成一或多个微指令106,这些微指令106可共同(collectively)地完成宏指令104所指定的操作。在此,一个储存宏指令被定义(define)为用以指示该微处理器100将数据由该微处理器100的一宏结构暂存器储存至一存储器位置的一个宏指令,且该存储器位置的地址由该储存宏指令所指定。举例来说,x86MOV宏指令就是一个储存宏指令,例如MOV[AX+BX],CX这个指令(如图6所示)所代表的意义就是命令微处理器100将位于暂存器CX中的数据移至一个存储器位置,此存储器位置的地址由暂存器AX与暂存器BX的加总所指定。关于融合储存微指令304的格式、生成、操作及撤出可参考下面的说明。

    在一实施例中,指令转译器108的宽度为三,亦即,在每一时脉中,指令转译器108最多可产生三个微指令106。根据宏指令104的混合情况,指令转译器108可在一时脉中由一、二或三个宏指令104产生三个微指令106。也就是说,如果被转译的连续三个宏指令104的每一个都只转译为一个微指令106,那么三个宏指令104全部可在单一时脉中被转译;而如果被转译的连续两个宏指令104的其中一个转译为两个微指令106,另外一个转译为一个微指令106,那么只有这两个宏指令104可在单一时脉中被转译;而如果被转译的下一个宏指令104转译为三个微指令106,那么只有此宏指令104在单一时脉中被转译。

    本发明的指令转译器108的优点在于其将一储存宏指令(store macro instruction)394转译成微结构指令集中的一个微指令106,亦即,转译成一个融合储存微指令304(将在图3a的说明中述及)。

    请参考图2,图2显示图1中的微处理器100的多个执行单元124内包含七个执行单元204~228的方块图。在本较佳实施例中,每一执行单元204~228被设计为平行(in parallel)执行,且与其它执行单元彼此独立。所述执行单元204~228在输入端(耦接至指令分派器118)具有被称为保留站(reservationstations)244~268的队列(queues),且指令分派器118或重排序缓冲器128会将微指令106载入至所述队列以供执行。在一较佳实施例中,分别位于MEDIA A单元204、SINT单元212、MOVE/BR单元216、LD单元220及STD单元228的保留站244、252、256、260、268每一个最多可储存12个微指令106,而分别位于MEDIA B单元208及STA单元224的保留站248、264每一个最多可储存8个微指令106。每一个执行单元204~228由其保留站抓取一个微指令106,并在指令分派器118判定该微指令106的所有起始运算元都已可用(available)后,执行该微指令106,举例来说,指令分派器118可根据微指令106已准备好被执行的信息来判定。每一执行单元204~228接收由指令分派器118传来的微指令106,并于微指令106被执行完毕后,在重排序缓冲器128中设定一完成状态旗标(completion status flag)。

    第一执行单元被称为浮点运算(MEDIA A)单元204,且用以执行浮点运算。第二执行单元被称为乘法运算(MEDIA B)单元208,且用以执行乘法运算。第三执行单元被称为整数运算(simple integer,SINT)单元212,是用以执行整数运算的算术逻辑单元(ALU)。第四执行单元被称为搬移/分支(move/branch,MOV/BR)单元216,且用以执行搬移或分支运算。第五执行单元被称为载入(load data,LD)单元220,且用以由存储器中撷取(fetch)运算元至微处理器100的暂存器以供计算。第六执行单元被称为储存地址单元(store address,STA)224,用以计算一储存运算的目的地址(destinationaddress),并将该计算出的地址写入分派给一储存缓冲器134。第七执行单元被称为储存数据单元(store data,STD)228,用以将由其它多个执行单元124传来的计算结果储存至一分派储存缓冲器(allocated store buffer),以供之后储存至存储器。

    请参考图3a,图3a显示本发明的融合储存微指令304的方块图。图1所示的微指令106包括了融合储存微指令304,此融合储存微指令304包括一运算码栏(opcode field)308、三个起始栏(即起始栏A 312、起始栏B 316及起始栏C 320)、一目的栏(destination field)324及一位移栏(displacement field)328。运算码栏308包括一个独特值(unique value),此独特值用以指示(indicate)该微指令是一个融合储存微指令304;而起始栏A312及起始栏B 316包括用以指定微处理器100的通用目的暂存器的值,通用目的暂存器用以暂存用来计算储存存储器地址的运算元。位移栏328也暂存了用来计算储存存储器地址的一常数值。起始栏C 320包括指定一通用目的暂存器的值,此通用目的暂存器内暂存了将被储存至一存储器位置的数据,而此存储器位置由所计算的储存存储器地址所指定;目的栏324则未被使用。然而,在之后的实施例中,会述及由融合储存微指令304所变化而来的融合储存推移微指令(fused store push microinstruction)及融合储存更新微指令(fused store update microinstruction),此两种微指令会执行指定在目的栏324中所指定的暂存器的更新。在一实施例中,融合储存微指令304储存了一立即值(imme diate value)到存储器,而非来自一暂存器的值。

    请参考图3b,图3b显示本发明的储存地址微指令332的方块图。储存地址微指令332包括一运算码栏336、三个起始栏(即起始栏A 340、起始栏B 344及起始栏C 348)、一目的栏352及一位移栏356。运算码栏336包括一个独特值,此独特值用以指示该微指令是一个储存地址微指令332。起始栏A 340及起始栏B 344包括用以指定微处理器100的通用目的暂存器的值,通用目的暂存器用以暂存用来计算储存存储器地址的运算元。位移栏356也暂存了用来计算储存存储器地址的一常数值。在一实施例中,起始栏C 348及目的栏352并未被使用。

    请参考图3c,图3c显示本发明的储存数据微指令338的方块图。储存数据微指令338包括一运算码栏358、三个起始栏(即起始栏A 360、起始栏B 364及起始栏C 368)、一目的栏372及一位移栏376。运算码栏358包括一个独特值,此独特值用以指示该微指令是一个储存数据微指令338。起始栏C 368包括指定一通用目的暂存器的值,此通用目的暂存器内暂存了将被储存至一存储器位置的数据,而此存储器位置由相关的储存地址微指令332计算储存存储器地址而得来。起始栏A 360、起始栏B364、目的栏372及位移栏376则未被使用。

    接下来,当指令分派器118从暂存器配置表116收到一融合储存微指令304时,指令分派器118并不会直接把融合储存微指令304分派给多个执行单元124,而是将一储存地址(STA)微指令332分派给STA单元224,并将一储存数据(STD)微指令338分派给STD单元228,另外,储存地址微指令332及储存数据微指令338并未占据重排序缓冲器128的任何登录地址。

    请参考图3d,图3d显示一储存宏指令394的方块图。储存宏指令394包括一运算码栏382、一基栏(base field)384、一索引栏(index field)386、一起始栏388及一位移栏392。运算码栏382包括一个独特值,此独特值用以指示该宏指令是一个储存宏指令394,例如x86 MOV指令。基栏384包括指定一通用目的暂存器的值,此通用目的暂存器内暂存了一个基本地址值(baseaddress value)。索引栏386包括指定一通用目的暂存器的值,此通用目的暂存器内暂存了一个阵列索引值(array indexvalue),此阵列索引值则可根据阵列元素的大小而等比例放大或缩小。位移栏392包括一常数值,此常数值被相加于基本地址值及按比例调整过大小的阵列索引值,以计算储存存储器地址。举例来说,x86中的MOV宏指令就是一个储存宏指令394,例如MOV[AX+BX],CX这个指令(如图6所示的例子)所代表的意义就是命令微处理器100将位于暂存器CX中的数据移至一个存储器位置,此存储器位置的地址由暂存器AX与暂存器BX的加总所指定。

    请参考图4,图4显示图1所示的重排序缓冲器128的一登录地址(ROB entry)404的方块图。每一登录地址404包括一微指令栏(micro instruction field)406、一融合储存旗标(fused storeflag)408、一储存数据完成旗标(STD完成旗标)412、一储存地址完成旗标(STA完成旗标)416及一标签栏(tag field)420。微指令栏406储存了该登录地址404所被分派的微指令。当暂存器配置表116收到一个新的微指令时,暂存器配置表116会在重排序缓冲器128中分派(allocate)一个登录地址404,并且将该微指令写入此登录地址404的微指令栏406。融合储存旗标408若被设定的话,表示储存于微指令栏406的微指令为融合储存微指令304。STD完成旗标412若被设定的话,表示STD单元228已经执行完与融合储存微指令304相关的储存数据微指令338。STA完成旗标416若被设定的话,表示STA单元224已经执行完与融合储存微指令304相关的储存地址微指令332。重排序缓冲器128为多个登录地址404所构成的阵列,且多个登录地址404符合逻辑地遵循(logically address)先进先出(FIFO)的循环运作。另外,标签栏420内的值用以表示每一登录地址404的索引(index)。

    请参考图5,图5显示本发明图1所示的微处理器100的部分结构执行图3d所示的储存宏指令394的方块图。图5绘示了图1中的指令转译器108、暂存器配置表116、指令分派器118、存储器子系统132、储存缓冲器134及重排序缓冲器128。另外,图5还绘示了图2中的STA单元224、STD单元228及与两者相关的保留站264、268。图5亦绘示了指令分派器118将一储存地址微指令332分派给STA单元224,并将一储存数据微指令338分派给STD单元228。在一实施例中,重排序缓冲器128包括了48个(标签栏为0~47)登录地址,要特别注意的是,每一登录地址(如标签栏为7)所含的各栏位如图4所示。另外,图5中的暂存器配置表116输出一融合储存指示符(fused store indicator)504给重排序缓冲器128。STA单元224输出一完成储存地址信号(完成STA信号)516给重排序缓冲器128。STD单元228输出一完成储存数据信号(完成STD信号)520给重排序缓冲器128。图5将在稍后图7的流程图中再作相关性的讨论。

    请参考图6,图6显示本发明图1的微处理器100执行图3d的储存宏指令394时的运算元移动情况的方块图。图6绘示了图1的指令转译器108及指令分派器118,以及图2的STA单元224及STD单元228。图6所举的例子是微处理器100处理一个x86 MOV指令,即MOV[AX+BX],CX。图6显示了起始运算元的移动情况,亦即,由图3d的储存宏指令394到图3a的融合储存微指令304,再到图3b的储存地址微指令332及图3c的储存数据微指令338的起始运算元移动情况。为了方便说明,在图6所举的例子中,储存宏指令394的位移栏392为0且未被绘出,另外,位移栏328、356、376也未被绘出。图6将在稍后图7的流程图中再作相关性的讨论。

    请参考图7,图7显示本发明的图1的微处理器100通过将图3d所示的储存宏指令394转译成图3a所示的融合储存微指令304,以执行该储存宏指令394的流程图。流程开始于步骤704。

    在步骤704中,指令转译器108收到图3d所示的储存宏指令394(如图5及图6所示)。在图6所举的例子中,储存宏指令394是x86宏结构中的MOV[AX+BX],CX宏指令,亦即,运算码栏382指定x86 MOV宏指令,基栏384指定暂存器AX,索引栏386指定暂存器BX,起始栏388指定暂存器CX,且位移栏392未被使用。流程接下来为步骤708。

    在步骤708中,指令转译器108将储存宏指令394转译成图3a所示的融合储存微指令304(如图5及图6所示)。在图6所举的例子中,指令转译器108根据储存宏指令394,将用来指定暂存器AX的值填入(populate)起始栏A 312、将用来指定暂存器BX的值填入起始栏B 316,且将用来指定暂存器CX的值填入起始栏C 320。流程接下来为步骤712。

    在步骤712中,暂存器配置表116收到融合储存微指令304,并计算运算元的依存性。特别注意的是,指令分派器118可决定融合储存微指令304的起始运算元是依存于微处理器100中的哪些微指令。流程接下来为步骤716。

    在步骤716中,暂存器配置表116分派重排序缓冲器128中的一个登录地址404(如图4所示)给融合储存微指令304(在图5的例子是标签栏为7的登录地址),并将融合储存微指令304写入被分派的登录地址404的微指令栏406,且将融合储存微指令304传送给指令分派器118(如图5及图6所示)。当暂存器配置表116将融合储存微指令304写入被分派的登录地址404的微指令栏406时,暂存器配置表116同时也设置(assert)了图5所示的融合储存指示符504。流程接下来为步骤720及724。

    在步骤720中,存储器子系统132监测暂存器配置表116的总线,并侦测融合储存微指令304,且分派一个储存缓冲器134。流程接下来为步骤728。

    在步骤724中,重排序缓冲器128在登录地址404中设定融合储存旗标408,以表示融合储存微指令304已被储存于微指令栏406,而这个动作是针对暂存器配置表116设置了图5所示的融合储存指示符504所做的回应。流程接下来为步骤728。

    在步骤728中,指令分派器118将融合储存微指令304转换成一储存地址微指令332及一储存数据微指令338,并将储存地址微指令332分派至STA单元224的保留站264,且将储存数据微指令338分派至STD单元228的保留站268(如图5及图6所示)。特别注意的是,指令分派器118将融合储存微指令304的起始栏A312内的值(即图6所示的AX)填入储存地址微指令332的起始栏A 340;指令分派器118将融合储存微指令304的起始栏B 316内的值(即图6所示的BX)填入储存地址微指令332的起始栏B344;另外,指令分派器118将融合储存微指令304的起始栏C 320内的值(即图6所示的CX)填入储存数据微指令338的起始栏C368。在一实施例中,指令分派器118在其总线输出单一融合储存微指令304,且保留站244~268会监测指令分派器118的总线。借此,STA单元224及STD单元228的保留站264、268会分别在总线上侦测到融合储存微指令304的存在,并且分别将融合储存微指令304视为一储存地址微指令332及一储存数据微指令338,同时载入至各自的保留站264、268中,此外,STA单元224及STD单元228被配置为分别将融合储存微指令304视为一储存地址微指令332及一储存数据微指令338。当储存地址微指令332变成保留站264里最旧的微指令,且其必需的起始运算元都可用时,发送逻辑(issue logic)单元(图未示)会将储存地址微指令332发送给STA单元224以供执行。特别注意的是,发送逻辑单元会忽视起始栏C 348的任何依存性。同样地,当储存数据微指令338变成保留站268里最旧的微指令,且其必需的起始运算元都可用时,发送逻辑单元会将储存数据微指令338发送给STD单元228以供执行。特别注意的是,发送逻辑单元会忽视起始栏A 360及起始栏B 364的任何依存性。如上所述,既然储存数据微指令338在这个例子中并未使用起始栏A 360及起始栏B 364,微处理器100的特别逻辑(special logic)单元会使能(enable)储存数据微指令338从起始栏C 368所指定的一通用目的暂存器中读取起始运算元。储存地址微指令332及储存数据微指令338彼此独立不互相影响,且彼此可乱序执行。流程接下来为步骤732及736。

    在步骤732中,STD单元228将数据从起始栏C 368所指定的暂存器写入步骤720所分派的储存缓冲器134中,且向重排序缓冲器128设置完成STD信号520(如图5所示)以设定STD完成旗标。在将数据写入储存缓冲器134之前,STD单元228会先从通用目的暂存器集142中的一暂存器读取数据,特别注意的是,此暂存器由起始栏C 368所指定。流程接下来为步骤740。

    在步骤736中,STA单元224会计算储存存储器地址,将计算出来的地址写入步骤720所分派的储存缓冲器134中,且向重排序缓冲器128设置完成STA信号516(如图5所示)以设定STA完成旗标。在计算储存存储器地址之前,STA单元224会由通用目的暂存器集142中的两暂存器读取起始运算元,特别注意的是,上述两暂存器由起始栏A 340及起始栏B 344所指定。流程接下来为步骤740。

    在步骤740中,重排序缓冲器128会侦测融合储存微指令304是否为重排序缓冲器128中已被执行完成的最旧微指令,重排序缓冲器128可以通过下述事项知道融合储存微指令304已被执行完成:融合储存旗标408已被设定、STD完成旗标412已被设定及STA完成旗标416已被设定。流程接下来为步骤744。

    在步骤744中,重排序缓冲器128会将融合储存微指令304撤出,因为构成融合储存微指令304的储存地址微指令332及储存数据微指令338都已被执行完毕。另外,重排序缓冲器128也会将储存宏指令394撤出,因为唯一与储存宏指令394相关的融合储存微指令304已经被撤出了。流程接下来为步骤748。

    在步骤748中,存储器子系统132会将步骤732中的储存缓冲器134的数据写入由存储器地址(memory address)指定的一个存储器位置,这个存储器位置就是在步骤736中写入储存缓冲器134的存储器地址。流程在步骤748结束。

    由图5、图6及图7可以知道,当指令分派器118从暂存器配置表116收到一融合储存微指令304时,指令分派器118并不会直接把融合储存微指令304分派给多个执行单元124,而是将一储存地址微指令332分派给S TA单元224,并将一储存数据微指令338分派给STD单元228,另外,储存地址微指令332及储存数据微指令338并未占据重排序缓冲器128的任何登录地址。STD完成旗标412用以指示STD单元228已完成与融合储存微指令304相关的储存数据微指令338的执行,且融合储存微指令304储存于相对应的重排序缓冲器128的登录地址404。同样地,STA完成旗标416用以指示STA单元224已完成与融合储存微指令304相关的储存地址微指令332的执行。当融合储存微指令304的构成微指令(即储存地址微指令332与储存数据微指令338)被执行完成后,重排序缓冲器128才会将融合储存微指令304撤出。在一实施例中,当STA完成旗标416与STD完成旗标412内的值都被设为1时,就表示储存地址微指令332与储存数据微指令338都被执行完成。本发明先将储存宏指令394转译成融合储存微指令304,再将融合储存微指令304分派成储存地址微指令332及储存数据微指令338来分派执行,而非直接分派融合储存微指令304来执行的好处在于:第一,融合储存微指令304只占据了重排序缓冲器128的一个登录地址404空间;第二,在一个时脉中,储存地址微指令332只需向通用目的暂存器集142作出两个读取的动作(如图7的步骤736所述),而储存数据微指令338只需向通用目的暂存器集142作出一个读取的动作(如图7的步骤732所述),如此使得通用目的暂存器集142的相关尺寸可以被缩小,速度可以加快,功率消耗也可以被减低,而且通用目的暂存器集142的设计也变简单了。然而,由于在一个时脉中将融合储存微指令304分派执行时,会需要向通用目的暂存器集142作出三个读取的动作,因此,会增加通用目的暂存器集142的读取端口的数量。

    请参考图8a,图8a显示现有微处理器的重排序缓冲器内的多个微指令的示意图。在图8a中,重排序缓冲器包括有十个登录地址,其标签栏分别为0~9,每一登录地址内存放了一个微指令,所以共有十个微指令,这十个微指令由七个宏指令所转译过来,在本例中,七个宏指令分别为x86中的MOV、ADD、CMP、MOV、ADD、SHR及MOV宏指令。每一MOV宏指令被转译成一个STA微指令及一个STD微指令(就像第3b及3c图所示的一样),其它宏指令(ADD、CMP、SHR)则被转译成单一微指令。在本例中,为了方便说明,所以假设重排序缓冲器有十个登录地址,且十个微指令都被分派执行,所以重排序缓冲器是满的,亦即,重排序缓冲器的十个登录地址都被占据。

    请参考图8b,图8b显示本发明图1所示的重排序缓冲器128内的多个微指令的示意图。图8b与图8a相似,但在图8a中,每一MOV宏指令被转译成一个STA微指令及一个STD微指令,而在图8b中,每一MOV宏指令被转译成单一融合储存微指令304,要特别注意的是,标签栏为0、3、6的登录地址404内各存有一个融合储存微指令304。如此一来,七个宏指令被转译成七个微指令,七个微指令只在重排序缓冲器128中占了标签栏为0~6的登录地址404,因此,标签栏为7~9的登录地址404便可提供给其它微指令使用。

    比较图8a及图8b可以得知,相较于现有的微处理器将一个储存宏指令394转译成多个微指令,本发明的微处理器100将一个储存宏指令394转译成单一融合储存微指令304,使得重排序缓冲器128可以腾出更多的空间来存放其它微指令,如此具有一个优点:可以产生一个微指令较多的微指令池(alarger pool ofmicro instructions)以便被分派给多个执行单元124执行。如前所述,一个微指令在它已被准备好的情况下才会被分派执行,例如,在它所需的起始运算元都可用的情况下。起始运算元通常为先前的微指令的结果,也就是说,微指令通常依存于其它微指令的结果。因此,当微处理器100能在一个微指令较多的微指令池中寻找准备好的微指令时,微处理器100所能找到的机率也大增,如此一来,多个执行单元124的利用率也可以提高。上述通常被称为微处理器的预看能力(look-ahead capability),预看能力较高的话可以使微处理器处理程序的指令时的平行性(parallelism)更好,而较高的预看能力也可以提高多个执行单元124的利用率,因此,本发明的微处理器100通过将储存宏指令394转译成单一融合储存微指令304而非多个微指令,使得预看能力得以提高。

    请参考图9a,图9a显示现有的指令转译器的操作方式的示意图。现有的指令转译器就像图1的实施例的指令转译器108一样,可以在同一个时脉中最多产生三个微指令,另外,现有的指令转译器也在所有关于宏指令的微指令都已在同一个时脉中产生后,才对宏指令进行转译。

    假设现有的指令转译器收到下列三个宏指令:

    MOV[mem],CX

    MOV[mem]AX

    ADD SI,DX

    第一个宏指令是MOV[mem],CX宏指令,这个宏指令是用来将暂存器CX里的内容移到存储器的一个位置。当现有的指令转译器看到MOV[mem],CX宏指令时,现有的指令转译器会对应地在第一个时脉中产生一个储存地址微指令332(如图3b所示)及一个储存数据微指令338(如图3c所示),在这个例子中,如图9a所示,储存地址微指令332存于重排序缓冲器128的标签栏为1的登录地址404,而储存数据微指令338存于重排序缓冲器128的标签栏为2的登录地址404。现有的指令转译器在看到MOV[mem],CX宏指令的同一个时脉中也看到MOV[mem],AX宏指令,然而,虽然现有的指令转译器可以在同一个时脉中产生三个微指令,但现有的指令转译器并不能在同一个时脉中同时转译MOV[mem],AX宏指令及MOV[mem],CX宏指令,因为这需要在同一个时脉中产生四个微指令(因现有的指令转译器将一个储存宏指令394转译成两个微指令),在同一个时脉中产生四个微指令已超过现有的指令转译器的转译上限。因此,现有的指令转译器将会等到下一个时脉(即第二时脉)再将MOV[mem],AX宏指令转译成一个储存地址微指令332(存于重排序缓冲器128的标签栏为3的登录地址404)及一个储存数据微指令338(存于重排序缓冲器128的标签栏为4的登录地址404)。另外,当现有的指令转译器看到ADD SI,DX宏指令时,现有的指令转译器会在将MOV[mem],AX宏指令转译成储存地址微指令及储存数据微指令的相同时脉中(即第二时脉),相对应地产生单一ADD微指令(存于重排序缓冲器128的标签栏为5的登录地址404)。由此可知,现有的指令转译器需要两个时脉来转译前述的三个宏指令,而且过程中会产生五个微指令,这五个微指令共占据了重排序缓冲器128的五个登录地址404。

    请参考图9b,图9b显示本发明的图1的指令转译器108的操作方式的示意图。指令转译器108接收与图9a一样的三个宏指令104,即MOV[mem],CX宏指令、MOV[mem]AX宏指令及ADDSI,DX宏指令。本发明的指令转译器108可在同一个时脉中看到这三个宏指令,且可在同一个时脉中对这三个宏指令进行转译。特别注意的是,在同一个时脉中,指令转译器108将MOV[mem],CX宏指令转译成一第一融合储存微指令,将MOV[mem]AX宏指令转译成一第二融合储存微指令,将ADD SI,DX宏指令转译成一ADD微指令,且被转译出来的三个微指令依序分别存于重排序缓冲器128的标签栏为1、2、3的登录地址404。

    比较图9a及图9b的两个例子可以看出,本发明的实施例具有两个优点。首先,通过将一个储存宏指令394转译成单一融合储存微指令304的方式,微处理器100相对于现有的微处理器来说,可以增加单一时脉中指令转译器108所产生的微指令的数目。特别注意的是,单一融合储存微指令304的转译方式,可以让指令转译器108在一个时脉中产生三个微指令的次数增加,而非仅在一个时脉中产生二或一个微指令。另外,单一融合储存微指令304的转译方式,可以让指令转译器108在一个时脉中产生两个微指令的次数增加,而非仅在一个时脉中产生一个微指令。如此增加了微处理器100的预看能力以及多个执行单元124的利用率,从而使得每一秒可被执行的宏指令数目增加。另外,本发明实施例的第二个优点是,融合储存微指令304仅占据了重排序缓冲器128的一个登录地址404,其好处已在之前叙述过,在此不再赘述。

    虽然在前述的实施例中,微处理器100将一储存宏指令394转译成单一融合储存微指令304,然而,本领域的技术人员可利用相同的概念作出相关的变化,例如,可以使微处理器100将包括储存或其它功能的多个宏指令转译成一系列的微指令,这些微指令包括融合储存微指令304或与其相似的其它微指令,可参见下述。

    类似于融合储存微指令304的一个新的微指令就是融合储存推移微指令(fused store push micro instruction),融合储存推移微指令具有图3a所示的融合储存微指令304的相同栏位,然而,融合储存推移微指令具有将目的栏324所指定的暂存器(pre-update of the register)预先更新的功能,且其运算码栏308内的值不同。特别注意的是,融合储存推移微指令将视EFLAGS暂存器的DF旗标的值来预先增加(pre-increment)或预先减少(pre-decrement)目的栏324所指定的暂存器。其它类似融合储存微指令304的新的微指令就是融合储存更新微指令(fusedstore update micro instruction),融合储存更新微指令具有图3a所示的融合储存微指令304的相同栏位,然而,融合储存更新微指令具有将目的栏324所指定的暂存器(post-update of theregister)事后更新的功能,且其运算码栏308内的值不同。特别注意的是,融合储存更新微指令将视EFLAGS暂存器的DF旗标的值来事后增加(post-increment)或事后减少(post-decrement)目的栏324所指定的暂存器。

    请参考图10,图10显示本发明的微处理器100将x86宏指令转译成微指令序列的示意图,这些微指令序列包括融合储存微指令304、融合储存推移微指令或融合储存更新微指令。在图10的列示中,MvFrmEfl微指令用以将EFLAGS暂存器内的值移至一临时暂存器(temporary register);AND微指令用以遮罩(masks off)临时暂存器中的某些位;XLEA微指令用以对所指定的暂存器执行一个x86型态载入有效地址运算(x86-styleload effective address operation),以增加地址;LOAD微指令用以由一存储器位置将一运算元载入至一临时暂存器中,该存储器位置由最先的两个起始栏所指向的暂存器所指定;Xbcc微指令用以执行与下一个指令指标(seq uential instruction pointer)相关的一x86型态分支操作(x86-style branch)。在一实施例中,微处理器100亦将x86 ENTER宏指令转译成包括融合储存微指令304的微指令序列。

    以上所述仅为本发明较佳实施例,然其并非用以限定本发明的范围,任何熟悉本项技术的人员,在不脱离本发明的精神和范围内,可在此基础上做进一步的改进和变化。举例来说,除了以硬件(例如耦接至或在一中央处理单元内、微处理器、微控制器、数字信号处理器、处理器核心、系统芯片或任何其它装置)来实现外,也可用软件(例如计算机可读码、程序码、或任何形式的指令,例如原始语言、目标语言或机械语言)来实现,例如,在一计算机可用(例如可读取)介质内储存该软件。举例来说,此种软件可以使功能执行、制造、制造模型、模拟、叙述或测试这里所提及的装置及方法,例如,可用通常的程序语言(例如C或C++)、硬件描述语言(例如Verilog HDL、VHDL)或其它程序来完成;此种软件可被安装于任何计算机可用介质,例如半导体、磁盘或光盘(例如CD-ROM、DVD-ROM等)。本发明的实施例包括提供一微处理器的方法,此通过提供描述有微处理器的设计的软件,并将该软件以计算机数据信号的方式通过通讯网络(包括因特网及局域网)传送出去。本发明的装置与方法亦可被用于一半导体IP核(semiconductorintellectual property core),例如一个微处理器核心(以HDL实现),之后再以集成电路的方式转换成硬件,另外,本发明的装置与方法亦可由硬件及软件来组合实现。因此,本发明不该被局限于所公开的实施例,其保护范围当以本申请的权利要求书所界定的范围为准。本发明实现于一微处理器装置中,且该微处理器装置被应用于一般的计算机。

    附图中符号的简单说明如下:

    100:微处理器

    104:宏指令

    106:微指令

    108:指令转译器

    116:暂存器配置表

    118:指令分派器

    124:多个执行单元

    128:重排序缓冲器

    132:存储器子系统

    134:储存缓冲器

    136:载入缓冲器

    138:快取存储器

    142:通用目的暂存器集

    204:MEDIA A单元(浮点运算执行单元)

    208:MEDIA B单元(乘法运算执行单元)

    212:SINT单元(整数运算执行单元)

    216:MOVE/BR单元(搬移/分支执行单元)

    220:LD单元(载入执行单元)

    224:STA单元(储存地址执行单元)

    228:STD单元(储存数据执行单元)

    244、248、252、256、260、264、268:保留站

    304:融合储存微指令

    308、358、382、336:运算码栏

    312、340、360:起始栏A

    316、344、364:起始栏B

    320、348、368:起始栏C

    324、352、372:目的栏

    328、356、376、392:位移栏

    332:储存地址微指令

    338:储存数据微指令

    384:基栏

    386:索引栏

    388:起始栏

    394:储存宏指令

    404:登录地址

    406:微指令栏

    408:融合储存旗标

    412:STD完成旗标

    416:STA完成旗标

    420:标签栏

    504:融合储存指示符

    516:完成STA信号

    520:完成STD信号

    704、708、712、716、720、724:步骤

    728、732、736、740、744、748:步骤。

微处理器、用以处理微处理器的储存宏指令的方法.pdf_第1页
第1页 / 共40页
微处理器、用以处理微处理器的储存宏指令的方法.pdf_第2页
第2页 / 共40页
微处理器、用以处理微处理器的储存宏指令的方法.pdf_第3页
第3页 / 共40页
点击查看更多>>
资源描述

《微处理器、用以处理微处理器的储存宏指令的方法.pdf》由会员分享,可在线阅读,更多相关《微处理器、用以处理微处理器的储存宏指令的方法.pdf(40页珍藏版)》请在专利查询网上搜索。

本发明提供一种微处理器、用以处理微处理器的储存宏指令的方法,该微处理器包括一指令转译器、一重排序缓冲器及一指令分派器。指令转译器用以将一储存宏指令转译成一融合储存微指令。重排序缓冲器包括多个登录地址,且用以接收来自该指令转译器的该融合储存微指令至所述登录地址的其中之一。指令分派器用以根据接收的该融合储存微指令,分派一储存地址微指令及一储存数据微指令至该微处理器的多个执行单元以供执行,其中,该储存地。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1