龙芯指令集LoongArch——学习笔记(1)

news2025/1/27 13:20:48

在这里插入图片描述

1 龙芯架构

PDF下载链接:

https://www.loongson.cn/download/index

1.1 龙芯架构概述

龙芯架构具有 RISC 指令架构的典型特征。 它的指令长度固定且编码格式规整, 绝大多数指令只有两个源操作数和一个目的操作数, 采用 load/store 架构, 即仅有 load/store 访存指令可以访问内存, 其它指令的操作对象均是处理器核内部的寄存器或指令码中的立即数。
龙芯架构分为 32 位和 64 位两个版本, 分别称为 LA32 架构和 LA64 架构。 LA64 架构应用级向下二进制兼容 LA32 架构。 所谓“应用级向下二进制兼容” 一方面是指采用 LA32 架构的应用软件的二进制可以直接运行在兼容 LA64 架构的机器上并获得相同的运行结果,另一方面是指这种向下二进制兼容仅限于应用软件, 架构规范并不保证在兼容 LA32 架构的机器上运行的系统软件(如操作系统内核)的二进制直接在兼容LA64 架构的机器上运行时总是获得相同的运行结果。
龙芯架构采用基础部分(Loongson Base) 加扩展部分的组织形式。 其中扩展部分包括: 二进制翻译扩展(Loongson Binary Translation, 简称 LBT)、 虚拟化扩展(Loongson Virtualization, 简称LVZ)、向量扩展(Loongson SIMD Extension,简称 LSX)和高级向量扩展(Loongson Advanced SIMD Extension,简称 LASX)

在这里插入图片描述
龙芯架构的基础部分包含非特权指令集和特权指令集两个部分, 其中非特权指令集部分定义了常用的整数和浮点数指令, 能够充分支持现有各主流编译系统生成高效的目标代码。 龙芯架构 32 位精简版是对LA32 基础部分的进一步简化, 目的是易于实现, 方便在教学和科研领域推广使用。

1.2 指令编码格式

龙芯架构中的所有指令均采用 32 位固定长度, 且指令的地址都要求 4 字节边界对齐。
指令编码的风格是所有寄存器操作数域都从第 0 比特开始从低到高依次摆放。 操作码都是从第 31 比特开始从高到低依次摆放。 如果指令中包含有立即数操作数, 那么立即数域位于寄存器域和操作码域之间,根据不同指令类型有不同的长度。 具体来说, 包含 9 种典型的指令编码格式, 即 3 种不含立即数的编码格式 2R、 3R、 4R, 以及 6 种含立即数的编码格式 2RI8、 2RI12、 2RI14、 2RI16、 1RI21、 I26

在这里插入图片描述

1.3 指令汇编助记格式

指令汇编助记格式主要包括指令名和操作数两部分。
通过指令名的前缀字母来区分非向量指令和向量指令、 整数和浮点数指令。 所有 128 位向量指令的指令名以字母“V” 开头; 所有 256 位向量指令的指令名以字母“XV” 开头。 所有非向量浮点数指令的指令名以字母“F” 开头; 所有 128 位向量浮点指令的指令名以“VF” 开头; 所有 256 位向量浮点指令的指令名以“XVF” 开头。

1.4 数据类型

基础整数指令操作的数据类型有 5 种, 分别是: 比特(bit, 简记 b)、 字节(Byte, 简记 B, 长度 8b)、半字(Halfword, 简记 H, 长度 16b)、 字(Word, 简记 W, 长度 32b)、 双字(Doubleword, 简记 D, 长度64b)。
在 LA32 架构下, 没有操作双字的整数指令。
字节、 半字、 字和双字数据类型均采用二进制补码的编码方式。

对于操作对象是整数类型的,指令名后缀为.B、.H、.W、.D、.BU、.HU、.WU、.DU分别表示该指令操作的数据类型是有符号字节、 有符号半字、 有符号字、 有符号双字、 无符号字节、 无符号半字、 无符号字、 无符号双字。

指令名后缀操作对象数据类型
.B有符号字节 (signed Byte, 8b)
.H有符号半字 (signed Halfword, 16b)
.W有符号字 (signed Word, 32b)
.D有符号双字 (signed Doubleword, 64b)
.BU无符号字节 (unsigned Byte, 8b)
.HU无符号半字 (unsigned Halfword, 16b)
.WU无符号字 (unsigned Word, 32b)
.DU无符号双字 (unsigned Doubleword, 64b)

2 基础整数指令

2.1 基础整数指令概述

基础整数指令类型指令
算术运算类指令ADD.{W/D}, SUB.{W/D}
ADDI.{W/D}, ADDU16I.D
ALSL.{W[U]/D}
LU12I.W, LU32I.D, LU52I.D
SLT[U]
SLT[U]I
PCADDI, PCADDU12I, PCADDU18I, PCALAU12I
AND, OR, NOR, XOR, ANDN, ORN
ANDI, ORI, XORI
NOP
MUL.{W/D}, MULH.{W[U[/D[U]}
MULW.D.W[U]
DIV.{W[U]/D[U]}, MOD.{W[U]/D[U]}
移位运算类指令SLL.W, SRL.W, SRA.W, ROTR.W
SLLI.W, SRLI.W, SRAI.W, ROTRI.W
SLL.D, SRL.D, SRA.D, ROTR.D
SLLI.D, SRLI.D, SRAI.D, ROTRI.D
位操作指令EXT.W.{B/H}
CL{O/Z}.{W/D}, CT{O/Z}.{W/D}
BYTEPICK.{W/D}
REVB.{2H/4H/2W/D}
REVH.{2W/D}
BITREV.{4B/8B}
BITREV.{W/D}
BSTRINS.{W/D}
BSTRPICK.{W/D}
MASKEQZ, MASKNEZ
转移指令BEQ, BNE, BLT[U], BGE[U]
BEQZ, BNEZ
B
BL
JIRL
访存指令LD.{B[U]/H[U]/W[U]/D}, ST.{B/H/W/D}
LDX.{B[U]/H[U]/W[U]/D}, STX.{B/H/W/D}
LDPTR.{W/D}, STPTR.{W/D}
PRELD
PRELDX
边界检查访存指令LD{GT/LE}.{B/H/W/D}, ST{GT/LE}.{B/H/W/D}
原子访存指令AM{SWAP/ADD/AND/PR/XOR/MAX/MIN}[_DB].{W/D}
AM{MAX/MIN}[_DB].{WU/DU}
LL.{W/D}, SC.{W/D}
栅障指令DBAR, IBAR
CRC校验指令CRC[C].W.{B/H/W/D}.W
其它杂项指令SYSCALL, BREAK, ASRT{LE/GT}.D
RDTIME{L/H}.W, RDTIME.D, CPUCFG

3 基础浮点数指令

3.1 基础浮点数指令概述

除了 FLDX.{S/D}、 FSTX.{S/D}、 FLD{GT/LE}.{S/D}和 FST{GT/LE}.{S/D}这 12条浮点访存指令仅属于 LA64 架构, 其余所有浮点数指令同时适用于 LA32 架构和 LA64 架构。

基础浮点数指令类型指令
浮点运算指令F{ADD/SUB/MUL/DIV}.{S/D}
F{MADD/MSUB/NMADD/NMSUB}.{S/D}
F{MAX/MIN}.{S/D}
F{MAXA/MINA}.{S/D}
F{SQRT/RECIP/RSQRT}.{S/D}
F{SCALEB/LOGB/COPYSIGN}.{S/D}
CLASS.{S/D}
浮点比较指令FCMP.cond.{S/D}
浮点转换指令FCVT.S.D, FCVT.D.S
FFINT.{S/D}.{W/L}, FTINT.{W/L}.{S/D}
FTINT{RM/RP/RZ/RNE}.{W/L}.{S/D}
FRINT.{S/D}
浮点搬运指令FMOV.{S/D}
FSEL
MOVGR2FR.{W/D}, MOVGR2FRH.W
MOVFR2GR.{S/D}, MOVFRH2GR.S
MOVGR2FCSR, MOVFCSR2GR
MOVFR2CF, MOVCF2FR
MOVGR2CF, MOVCF2GR
浮点分支指令BCEQZ, BCNEZ
浮点普通访存指令FLD.{S/D}, FST.{S/D}
FLDX.{S/D}, FSTX.{S/D}
浮点边界检查访存指令FLD{GT/LE}.{S/D}, FST{GT/LE}.{S/D}

4 特权指令

4.1 特权指令概述

特权指令类型指令
CSR访问指令CSRRD, CSRWR, CSRXCHG
IOCSR访问指令IOCSR{RD/WR}.{B/H/W/D}
Cache维护指令CACOP
TLB维护指令TABSRCH, TABRD, TABWR, TABFILL, TABCLR, TABFLUSH, INVTAB
软件页表遍历指令LDDIR, LDPTE
其他杂项指令ETRN, DBCL, IDLE

5 指令集功能解析

未完待续…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/995829.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录算法训练营day42 | 动态规划 背包问题 01背包 二维数组一维数组 |416. 分割等和子集

动态规划:背包理论 背包理论基础 对于面试的话,其实掌握01背包,和完全背包,就够用了,最多可以再来一个多重背包。 如果这几种背包,分不清,我这里画了一个图,如下: 而完…

Unity 从0开始编写一个技能编辑器_01_分析需求

入职以来一直很想实现一个技能编辑器,在积累了一些经验以后,决定利用ScriptableObject开发一个,在此记录 1.简单的需求分析 在游戏开发中,技能系统是一个至关重要的组成部分。技能决定了游戏角色可以执行的各种动作,例…

【深入理解Linux内核锁】八、完成量

我的圈子: 高级工程师聚集地 我是董哥,高级嵌入式软件开发工程师,从事嵌入式Linux驱动开发和系统开发,曾就职于世界500强企业! 创作理念:专注分享高质量嵌入式文章,让大家读有所得! 文章目录 1、完成量API2、API实现2.1 completion2.2 init_completion2.3 wait_for_com…

运行速度终于变快了!优化VMD参数,五种适应度函数任意切换,最小包络熵、样本熵、信息熵、排列熵、排列熵/互信息熵...

经常有小伙伴后台留言,说优化VMD参数的程序为什么运行时间辣么长,有没有办法改善一下! 今天小淘就为大家带来了改善运行时间的方法:采用官方自带的vmd函数 这是MATLAB官方自带的VMD函数截图,可以看到只有2020a版本以后…

【JAVA】 图书管理系统(javaSE简易版 内含画图分析) | 期末大作业课程设计

作者主页:paper jie 的博客 本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文录入于《JAVA》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精力)打造&…

SLAM从入门到精通(ROS安装)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 ROS科研上面用的多,实际生产其实用的也不少。它本身还是很好的应用框架。当然,它对于很多初学的同学来说还是很友好的。学完…

管理类联考——数学——汇总篇——知识点突破——工程

⛲️ 工程问题是应用题中仅次于路程问题的一个常考点,既是重点,也是难点。其主要的基本关系式为: 工作时间 工作效率 工作量 工作时间工作效率工作量 工作时间工作效率工作量。 本专题主要学习复杂的工程问题,主要有以下三种方…

【动手学深度学习】--机器翻译与数据集

文章目录 机器翻译与数据集1.下载和预处理数据集2.词元化3.词表4.加载数据集5.训练模型 机器翻译与数据集 学习视频:机器翻译数据集【动手学深度学习v2】 官方笔记:机器翻译与数据集 机器翻译(machine translation)指的是 将序…

absolute和relative元素层级问题

布局层级问题 同一个父元素的两个子元素&#xff0c;一个是absolute布局&#xff0c;一个是relative布局&#xff0c;为啥relative元素在absolute元素的背景色之上&#xff1f; 实例&#xff1a; <div id"father">father<div id"c1">c1-absolu…

人工智能海洋中的塞壬之歌:大型语言模型LLM中的幻觉研究综述(一)

“ 大型语言模型LLM 如 ChatGPT 已经得到了广泛的应用&#xff0c;涵盖了诸多应用领域。但也存在生成内容与事实不符的幻觉问题。这种幻觉包括输入冲突、语境冲突以及与事实相冲突的情况&#xff0c;给实际需求和应用构建带来了挑战。一篇最新的论文《Sirens Song in the AI Oc…

科技革新自动驾驶:拓世AI智能助理携手跟您一起点亮未来之旅

科技改变生活&#xff0c;智能改变世界&#xff0c;近年来&#xff0c;随着科技的不断进步&#xff0c;政策和市场的赋能推动&#xff0c;自动驾驶已经成为当今社会最炙手可热的话题之一。从其中的技术发展趋势来看&#xff0c;我国自动驾驶模式正由单车智能向车路协同时代演进…

王道数据结构编程题 栈和队列

判断合法序列 题目描述 假设 I 和 O 分别表示入栈和出栈操作&#xff0c;栈的初态和终态均为空&#xff0c;入栈和出栈的操作序列可表示为仅由 I 和 O 组成的序列&#xff0c;可以操作的序列称为合法序列&#xff0c;否则称为非法序列。编写一个算法&#xff0c;判定所给的序…

《向量数据库》——都有哪些向量数据库,都有什么特点?

随着大数据和机器学习应用的崛起,对于存储和查询高维度向量数据的需求也逐渐增加。在这个背景下,向量数据库和传统的关系型数据库开始在不同的数据世界中崭露头角,它们分别以各自独特的方式解决了不同类型数据的存储和查询需求。本文将探讨向量数据库和关系型数据库之间的区…

第5章_瑞萨MCU零基础入门系列教程之GPIO输入输出

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写&#xff0c;需要的同学可以在这里获取&#xff1a; https://item.taobao.com/item.htm?id728461040949 配套资料获取&#xff1a;https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总&#xff1a; ht…

计算机网络原理 运输层

一&#xff0c;运输层协议概述 1&#xff0c;进程之间的通信 从通信和信息处理的角度看&#xff0c;运输层向它上面的应用层提供通信服务&#xff0c;它属于面向通信部分的最高层&#xff0c;同时也是用户功能中的最底层。当网络边缘部分的两台主机使用网络核心部分的功能进行…

水表电表集中远程抄表系统分析

电表水表远程抄表系统石家庄光大远通电气有限公司主要经营自动抄表,远程抄表,集中抄表,新供应信息&#xff0c;是石家庄光大远通电气有限公司自动远程抄表系统集信号采集、网络通信于一体的高性能抄表装置&#xff0c;该系统以485通讯方式读取水表电表的数据,以MBUS通讯方式读取…

SwiftUI 内功加持:“曳光弹“实现自定义样式进度条(ProgressView)

概览 虽然 SwiftUI 已为我们内置了很多常用视图&#xff0c;不过有时我们还是需要根据实际来进一步美化显示或增加功能。 如上图所示&#xff0c;在本篇博文中我们将结合敏捷哲学中一个超级实用的开发技巧&#xff1a;曳光弹&#xff0c;来一步一个脚印循序渐进的实现 Progres…

应急响应-Windows挖矿实战

0x00 主机表现 windows主机cpu拉满&#xff0c;主机卡顿&#xff0c;初步判断为中了挖矿病毒 0x00 处置 通过cpu拉满状态&#xff0c;定位初步的进程文件&#xff0c; 通过进程得到的文件上传沙箱&#xff0c;结果显示为恶意文件&#xff0c; 定位到文件夹&#xff0c; 存…

力扣:92. 反转链表 II(Python3)

题目&#xff1a; 给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回 反转后的链表 。 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;力扣&#…