标签: instruction-set

我在哪里可以找到*all*MIPS指令的描述,

有谁知道我可以找到32位MIPS指令/操作码列表的网站,具有以下功能:

  • 清楚地区分真实操作码和汇编语言宏
  • 描述指令行为,包括取决于权限级别的差异.
  • 指示引入/修改指令的指令集修订版(例如MIPS I,MIPS II,MIPS32等)
  • 包括特权指令,例如系统调用.

我知道很多网站都记录了指令集的"一部分",主要用于教学目的.他们倾向于遗漏或仅部分描述浮点和特权指令.

如果你想知道,我正在研究MIL处理器子集的Verilog代码,并试图弄清楚它在多大程度上符合任何真正的MIPS处理器的指令集!谢谢你的任何指示.

assembly reference mips instruction-set

13
推荐指数
2
解决办法
4466
查看次数

FMA指令_mm256_fmadd_pd():"132","231"和"213"?

可能有人向我解释为什么有融合的乘累加指令的3个变种:vfmadd132pd,vfmadd231pdvfmadd213pd,虽然只有一架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)
  • AT&T语法: 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 assembly simd instruction-set fma

13
推荐指数
1
解决办法
4542
查看次数

学习x86指令集的最简单/最佳方法?

我想学习x86指令集架构.我不是要为x86学习程序集.我想了解机器代码宝贝.

原因是我想为x86编写汇编程序.然后我想编写一个编译成该程序集的编译器.

我知道有英特尔手册和AMD手册涵盖了x86指令集.但那些非常大而且密集.

我想知道是否有一种更平易近人(可能是教程)的方法来学习x86指令集架构.

x86 assembly instruction-set

12
推荐指数
2
解决办法
6077
查看次数

为什么CISC处理器更难管道?在某种意义上,某些指令比其他指令"更复杂"?

根据Miles Murdoca和Vincent Heuring的"计算机体系结构和组织",

CISC指令不适合流水线架构.为了使流水线有效工作,每条指令都需要与其他指令具有相似性,至少在相对指令复杂性方面如此.

为什么这是真的?指令复杂性是什么意思,并非所有指令都需要一个时钟周期才能开始执行; 如果指令正在读取或写入内存,则需要更长时间,但RISC处理器读取也会写入内存(当然)?

x86 instruction-set cpu-architecture pipelining risc

11
推荐指数
1
解决办法
6347
查看次数

为什么可执行文件可以在Intel和AMD处理器上运行?

如何在AMD和Intel系统上运行可执行文件.AMD和英特尔的指令集不同吗?可执行文件如何在两者上工作?他们究竟是如何编译文件的呢?操作系统在这一切中的作用究竟是什么?

executable instruction-set platform-independent instructions

11
推荐指数
2
解决办法
2100
查看次数

VPERMILPS指令的重点是什么(_mm_permute_ps)?

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使它们不受影响.

x86 assembly instruction-set avx

11
推荐指数
1
解决办法
271
查看次数

为什么 RISC-V SB 和 UJ 指令类型以这种方式编码?

我正在读一本书“计算机组织和设计 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)

谁能解释一下?

assembly encoding instruction-set machine-code riscv

11
推荐指数
2
解决办法
2964
查看次数

MWAIT与HALT在效率方面

我对MONITOR-MWAIT和HLT指令提出了疑问.两者都停止处理器,两者都在各种外部触发器(中断等)上唤醒.

在我的实验中,HLT和MWAIT功能几乎相同,考虑到:

  • 如果您不是 OS调度程序,带有上述指令的简单循环将很快中断,并且由于MWAIT需要重新检查MONITOR和MWAIT之间的条件,有什么区别?(我要问的是,为什么不首先使用HLT,并节省分配跟踪区域的痛苦(如果不仔细配置,则避免使用mon/mwait机制并将其转换为NOP),因为如果你'不是操作系统调度程序,你没有机会快速唤醒,只需检查HLT循环中的值...... ???

(当然,MWAIT可能是更高的分辨率,我没有测量分辨率,但它似乎超过了唤醒(我假设)中断等等.所以我看不到大的优势.

谢谢,以这种方式的任何想法将不胜感激

assembly x86-64 instruction-set cpu-architecture

10
推荐指数
2
解决办法
7640
查看次数

mtune实际上是如何工作的?

有这个相关的问题:海湾合作委员会:游行与mtune有何不同?

但是,现有答案并没有比GCC手册本身更进一步.我们最多得到:

如果您使用-mtune,那么编译器将生成适用于其中任何一个的代码,但将支持在您指定的特定CPU上运行速度最快的指令序列.

-mtune=Y选项调整生成的代码以在Y上运行得比在其可能运行的其他CPU上运行得更快.

但是GCC 如何支持一个特定的体系结构,在构建时,同时仍然能够在其他(通常是较旧的)体系结构上运行构建,虽然速度较慢?

我只知道有一件事(但我不是计算机科学家)才能做到这一点,而且那是一个CPU调度员.但是,(对我来说)似乎并不是mtune在幕后生成调度程序,而是其他一些机制可能正在生效.

我觉得这样做有两个原因:

  1. 搜索"gcc mtune cpu dispatcher"找不到任何相关内容; 和
  2. 如果它基于调度程序,我认为它可以更智能(即使通过除了之外的某些选项mtune)并测试cpuid在运行时检测支持的指令,而不是依赖于在构建时提供的命名体系结构.

那么它如何运作呢?

optimization gcc instruction-set cpu-architecture instructions

10
推荐指数
1
解决办法
1359
查看次数

为什么RISC-V没有计算执行指令?

我需要在RISC-V上处理bignum计算(加法和减法,但我将减法视为等同于有符号加法),情况有点复杂。我通过半个小时的互联网研究得到的信息:

  • RISC-V 操作不提供检查进位或溢出的方法
  • 这一决定的动机是,标志或其他处理方法给无序微架构增加了很多复杂性。
  • 相反,他们建议事后进行分支
    • 对于无符号加法,可以使用单个bltu.
    • 如果操作数之一的符号已知,则与有符号加法相同
    • 否则,需要执行两次检查(三个附加指令)
  • 互联网上的人们对此非常愤怒(我不会在这里链接)

据我所知,这些分支确实很好地涵盖了大多数场景,除了一个:(有符号)bignum 加法。因为在那里,我们遇到了热循环中最慢的检查路径。

我对 ISA 设计知之甚少,但为什么他们不包含计算(a + b) >> 32(实际上是执行)的指令?有点像乘法指令被分成mulmulh的方式。这将允许始终使用两条指令进行所需的计算。更强大的微架构甚至可以检测序列并且只进行一项加法。

我是否遗漏了一些会使该指令过时(或与其等效)的技巧?它有我需要监督的重大缺点吗?我没有找到关于这个一般主题的很多好的文档。

assembly instruction-set bignum riscv

10
推荐指数
1
解决办法
3704
查看次数