有谁知道我可以找到32位MIPS指令/操作码列表的网站,具有以下功能:
我知道很多网站都记录了指令集的"一部分",主要用于教学目的.他们倾向于遗漏或仅部分描述浮点和特权指令.
如果你想知道,我正在研究MIL处理器子集的Verilog代码,并试图弄清楚它在多大程度上符合任何真正的MIPS处理器的指令集!谢谢你的任何指示.
可能有人向我解释为什么有融合的乘累加指令的3个变种:vfmadd132pd,vfmadd231pd和vfmadd213pd,虽然只有一架C内联函数_mm256_fmadd_pd?
为简单起见,有什么区别(在AT&T语法中)
vfmadd132pd %ymm0, %ymm1, %ymm2
vfmadd231pd %ymm0, %ymm1, %ymm2
vfmadd213pd %ymm0, %ymm1, %ymm2
Run Code Online (Sandbox Code Playgroud)
我从英特尔的内在指南中得不到任何想法.我问,因为我在我写的一大块C代码的汇编输出中看到了所有这些.谢谢.
一个干净的答案(重新格式化答案如下)
对于变体ijk,含义vfmaddijkpd:
op(i) * op(j) + op(k) -> op(1)op(4-i) * op(4-j) + op(4-k) -> op(3)where op(n)表示指令后的第n个操作数.所以两者之间存在逆转:
n <- 4 - n
Run Code Online (Sandbox Code Playgroud) 我想学习x86指令集架构.我不是要为x86学习程序集.我想了解机器代码宝贝.
原因是我想为x86编写汇编程序.然后我想编写一个编译成该程序集的编译器.
我知道有英特尔手册和AMD手册涵盖了x86指令集.但那些非常大而且密集.
我想知道是否有一种更平易近人(可能是教程)的方法来学习x86指令集架构.
根据Miles Murdoca和Vincent Heuring的"计算机体系结构和组织",
CISC指令不适合流水线架构.为了使流水线有效工作,每条指令都需要与其他指令具有相似性,至少在相对指令复杂性方面如此.
为什么这是真的?指令复杂性是什么意思,并非所有指令都需要一个时钟周期才能开始执行; 如果指令正在读取或写入内存,则需要更长时间,但RISC处理器读取也会写入内存(当然)?
如何在AMD和Intel系统上运行可执行文件.AMD和英特尔的指令集不同吗?可执行文件如何在两者上工作?他们究竟是如何编译文件的呢?操作系统在这一切中的作用究竟是什么?
executable instruction-set platform-independent instructions
AVX指令集引入了VPERMILPS,它似乎是SHUFPS的简化版本(对于两个输入寄存器相同的情况).
例如,以下说明:
c5 f0 c6 c1 00 vshufps xmm0,xmm1,xmm1,0x0
Run Code Online (Sandbox Code Playgroud)
可以替换为:
c4 e3 79 04 c1 00 vpermilps xmm0,xmm1,0x0
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,VPERMILPS版本需要额外增加一个字节并执行相同的操作.根据指令表,两条指令占用1个CPU周期并具有相同的吞吐量.
引入这种指令有什么意义?我错过了什么吗?
编辑: 有是这两个指令的区别之一.VPERMILPS将上部通道设置为零,而SHUFPS使它们不受影响.
我正在读一本书“计算机组织和设计 RISC-V 版”,我遇到了 SB 和 UJ 指令类型的编码。
我上面提到的那些类型具有奇怪的编码立即字段。
SB 类型将立即数字段分成两部分。这是有道理的,因为所有指令编码都必须相似。但我不明白为什么下面的直接字段以这种方式编码。
imm[12, 10:5], imm[4:1, 11]
Run Code Online (Sandbox Code Playgroud)
代替
imm[11:5], imm[4:0]
Run Code Online (Sandbox Code Playgroud)
UJ 类型也有这个奇怪的编码立即字段
imm[20,10:1,11,19:12]
Run Code Online (Sandbox Code Playgroud)
代替
imm[19:0]
Run Code Online (Sandbox Code Playgroud)
谁能解释一下?
我对MONITOR-MWAIT和HLT指令提出了疑问.两者都停止处理器,两者都在各种外部触发器(中断等)上唤醒.
在我的实验中,HLT和MWAIT功能几乎相同,考虑到:
(当然,MWAIT可能是更高的分辨率,我没有测量分辨率,但它似乎超过了唤醒(我假设)中断等等.所以我看不到大的优势.
谢谢,以这种方式的任何想法将不胜感激
有这个相关的问题:海湾合作委员会:游行与mtune有何不同?
但是,现有答案并没有比GCC手册本身更进一步.我们最多得到:
如果您使用
-mtune,那么编译器将生成适用于其中任何一个的代码,但将支持在您指定的特定CPU上运行速度最快的指令序列.
和
该
-mtune=Y选项调整生成的代码以在Y上运行得比在其可能运行的其他CPU上运行得更快.
但是GCC 如何支持一个特定的体系结构,在构建时,同时仍然能够在其他(通常是较旧的)体系结构上运行构建,虽然速度较慢?
我只知道有一件事(但我不是计算机科学家)才能做到这一点,而且那是一个CPU调度员.但是,(对我来说)似乎并不是mtune在幕后生成调度程序,而是其他一些机制可能正在生效.
我觉得这样做有两个原因:
mtune)并测试cpuid在运行时检测支持的指令,而不是依赖于在构建时提供的命名体系结构.那么它如何运作呢?
optimization gcc instruction-set cpu-architecture instructions
我需要在RISC-V上处理bignum计算(加法和减法,但我将减法视为等同于有符号加法),情况有点复杂。我通过半个小时的互联网研究得到的信息:
bltu.据我所知,这些分支确实很好地涵盖了大多数场景,除了一个:(有符号)bignum 加法。因为在那里,我们遇到了热循环中最慢的检查路径。
我对 ISA 设计知之甚少,但为什么他们不包含计算(a + b) >> 32(实际上是执行)的指令?有点像乘法指令被分成mul和mulh的方式。这将允许始终使用两条指令进行所需的计算。更强大的微架构甚至可以检测序列并且只进行一项加法。
我是否遗漏了一些会使该指令过时(或与其等效)的技巧?它有我需要监督的重大缺点吗?我没有找到关于这个一般主题的很多好的文档。
instruction-set ×10
assembly ×7
x86 ×4
instructions ×2
riscv ×2
avx ×1
bignum ×1
encoding ×1
executable ×1
fma ×1
gcc ×1
machine-code ×1
mips ×1
optimization ×1
pipelining ×1
reference ×1
risc ×1
simd ×1
x86-64 ×1