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

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 指令集功能解析
未完待续…
相关文章:
龙芯指令集LoongArch——学习笔记(1)
1 龙芯架构 PDF下载链接: https://www.loongson.cn/download/index 1.1 龙芯架构概述 龙芯架构具有 RISC 指令架构的典型特征。 它的指令长度固定且编码格式规整, 绝大多数指令只有两个源操作数和一个目的操作数, 采用 load/store 架构&…...
ubuntu 20.04 docker安装emqx 最新版本或指定版本
要在Ubuntu 20.04上使用Docker安装EMQX(EMQ X Broker)的4.4.3版本,您可以执行以下步骤: 1.更新系统包列表: sudo apt update2.安装Docker: sudo apt install docker.io3.启动Docker服务并设置其开机自启…...
软件测试/测试开发丨学会与 AI 对话,高效提升学习效率
点此获取更多相关资料 简介 ChatGPT 的主要优点之一是它能够理解和响应自然语言输入。在日常生活中,沟通本来就是很重要的一门课程,沟通的过程中表达越清晰,给到的信息越多,那么沟通就越顺畅。 和 ChatGPT 沟通也是同样的道理&…...
CEF内核和高级爬虫知识
(转)关于MFC中如何使用CEF内核(CEF初解析) Python GUI: cefpython3的简单分析和应用 cefpython3:一款强大的Python库 开始大多数抓取尝试可以从几乎一行代码开始: fun main() PulsarContexts.createSession().scrapeOutPages(&q…...
视频集中存储/云存储/磁盘阵列EasyCVR平台分组批量绑定/取消设备功能详解
安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台视频能力丰富灵活,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。视频汇聚融合管理平台EasyCVR既具备传…...
科技成果鉴定测试报告一般包含哪些测试内容?
软件测评报告 一、科技成果评价是需要做第三方软件测评报告,一般是证明技术指标点是否完善,覆盖主要申报内容,应用软件项目科技成果鉴定测试内容: (一)是否完成合同或计划任务书要求的指标; …...
IDEA中的“Deployment“ 将项目直接部署到服务器上
ntelliJ IDEA中的"Deployment"工具栏是一个方便的工具,用于将你的项目直接部署到服务器上。这个工具栏提供了三种部署的方式: 1.Web Server在本地电脑上,并且服务器运行目录也在项目目录下。 2.Web Server在本地电脑上,…...
密室逃脱小游戏
欢迎来到程序小院 密室逃脱 玩法: 判断可生存的空间,鼠标点击屏幕进行人物左右移动,躲避闸道进行生存,每进行一次关卡都会有分数统计,赶紧去闯关吧^^。开始游戏https://www.ormcc.com/play/gameStart/176 html <c…...
【MyBatis】MyBatis项目结构的搭建
Mybatis项目的搭建 依赖 将打包方式添加为jar包 <groupId>com.qinghe.mybatis</groupId><artifactId>Mybatis_demo3</artifactId><version>1.0-SNAPSHOT</version><packaging>jar</packaging>添加如下依赖 <depen…...
Vant组件库入门知识
🙈作者简介:练习时长两年半的Java up主 🙉个人主页:程序员老茶 🙊 ps:点赞👍是免费的,却可以让写博客的作者开兴好久好久😎 📚系列专栏:Java全栈,…...
Java字符串查找
目录 1.查找字符 (1)以索引查找字符 (2)以字符查找索引 2.查找字符串 在给定的字符串中查找需要的字符或字符串是常见的操作,以下是String类中常用的查找方法。 1.查找字符 查找字符分为两种情况:一种…...
2023年7月京东投影仪行业品牌销售排行榜(京东大数据)
鲸参谋监测的京东平台7月份投影仪行业销售数据已出炉! 7月份,投影仪市场呈现增长趋势。根据鲸参谋平台的数据可知,7月京东平台投影仪的销量将近20万,同比增长约16%;销售额将近3.8亿,同比增长约4%。 *数据…...
设计模式-01简单工厂模式详解 详细代码对比
目录 ChatGpt问答原生代码简单工厂模式代码 简单工厂模式(Simple Factory Pattern)新增boat 对比两种方法原生代码为什么使用强制转换?简单工厂模式 简单工厂方法总结与原生代码的区别:优点:缺点: 参考 本文将介绍什么…...
IPD-PDT-POP角色的名称、定位和职责说明书
在IPD推进中,有一个不是很关键但却离不开的角色叫做POP,POP这个角色通常是设置在PDT团队中。 那么IPD的PDT团队中的POP这个角色到底是什么意思呢?POP如何开展工作,以及POP的主要岗位职责有哪些呢?华研荟今天给大家分享…...
在MySQL中查看数据库和表的数据大小
在MySQL中查看数据库和表的数据大小 在管理和维护MySQL数据库时,了解数据库和表的数据大小是非常重要的。这可以帮助您监控数据库的增长、优化性能以及规划存储需求。本博客将介绍如何使用SQL查询来查看MySQL数据库和表的数据大小。 查看MySQL数据库的总数据大小 …...
Android前端音视频数据接入GB28181平台意义
技术背景 在华脉智联研发Android平台GB28181前端音视频接入模块之前,业内听到最多的是,如何用Android端在没有国标摄像头设备的前提下,模拟GB28181的信令和媒体流交互流程,实现GB28181整体方案的测试。 Android端真的没有必要做…...
Ubuntu 20.04上docker安装Redis
要在Ubuntu 20.04上使用Docker安装Redis,您可以按照以下步骤进行操作: 1.更新系统包列表:sudo apt update2.安装Docker:sudo apt install docker.io3.启动Docker服务并设置其开机自启动:sudo systemctl start docker …...
linux 压缩webfile文件夹 webfile.tar.gz和webfile.tar的区别
linux 压缩webfile文件夹 在Linux中,你可以使用tar命令来压缩文件夹。以下是将文件夹压缩为名为"webfile.tar"的示例命令: cd到webfile所在的文件夹,然后执行 tar -cvf webfile.tar webfile/上述命令中,-c选项表示创建…...
基于SSM的农产品推广应用网站
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用Vue技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…...
人大金仓分析型数据库身份鉴别
目录 前言 数据库总参数 口令尝试次数 口令更换周期 明文密码替换 用户登录信息显示 前言 身份鉴别功能包含口令尝试次数限制、口令更换周期管理、明文密码替换和用户登录信息显示等几部分。 数据库总参数 identity_auth.enable 是否使用身份鉴别功能,布尔值…...
图床项目(二) 接口设计
接口设计 1 . muduo 网络模型 该模型相较于普通的reactor模型复杂一点,其中包括mainReactor 和 多个 subReactor ,其中每一个 subReactor对应一个线程。 其中 mainReactor 负责处理新连接 , 并将连接均匀分配给 subReactor ,后续…...
CnDataSeed发布:中国科研工作者跳槽研究数据库(CAMRD)
一、数据简介 追踪学术流动,解析科研人才动力机制! 在中国科研生态快速演化的背景下,科研人才流动是科研创新与学术产出的关键驱动力。但跳槽相关研究在高教研究中一直较为稀缺,系统化、可量化的科研工作者跳槽数据长期缺失&…...
深度解析ViGEmBus:Windows虚拟游戏手柄驱动实战指南
深度解析ViGEmBus:Windows虚拟游戏手柄驱动实战指南 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus ViGEmBus是一款专业的Windows内核模式驱动&a…...
光场相机入门:Macro Pixel与SAI如何让你的照片秒变3D(附Python代码示例)
光场相机实战指南:用Macro Pixel与SAI技术打造沉浸式3D影像 当你第一次看到光场相机拍摄的照片能在屏幕上自由切换焦点时,那种震撼感就像发现了摄影的新维度。这背后是Macro Pixel和SAI两项核心技术的完美配合——它们让静态图像拥有了动态的视角选择能力…...
在RK3576开发板上手把手编译并运行你的第一个MPP编码程序(含VSCode配置避坑)
在RK3576开发板上从零构建MPP编码开发环境的完整指南 1. 开发环境准备与交叉编译工具链配置 对于嵌入式开发者而言,RK3576开发板的MPP开发环境搭建需要从基础工具链开始。不同于x86平台的开发,我们需要特别注意交叉编译环境的配置细节。 首先需要获取适用…...
美军“转正”美科技公司AI系统,专家解读
来源:环球时报【环球时报报道 记者 刘扬】据路透社等外媒近日报道,五角大楼将把美国科技公司Palantir的人工智能(AI)系统Maven列为“正式在编项目”,使美军多军种将该公司的相关技术用于军事领域。五角大楼强调&#x…...
用Mermaid Live Editor 5分钟搞定技术图表:从零开始的完整实战指南
用Mermaid Live Editor 5分钟搞定技术图表:从零开始的完整实战指南 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid…...
还在纸上谈Agent?来搓一只你的「腾讯小龙虾」
大模型卷完参数,开始卷落地。当所有人还在谈论AI Agent如何颠覆未来工作方式时,一部分开发者已经让它为自己“打工”了。从写一封邮件,到整理一份报告,再到串联多个系统完成业务动作,AI 正在完成一次关键的身份跃迁&am…...
OpenMemories-Tweak完整指南:如何安全解锁索尼相机的隐藏功能
OpenMemories-Tweak完整指南:如何安全解锁索尼相机的隐藏功能 【免费下载链接】OpenMemories-Tweak Unlock your Sony cameras settings 项目地址: https://gitcode.com/gh_mirrors/op/OpenMemories-Tweak OpenMemories-Tweak是一款专为索尼相机设计的开源解…...
League-Toolkit:智能辅助驱动的英雄联盟效率提升解决方案
League-Toolkit:智能辅助驱动的英雄联盟效率提升解决方案 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League-Tool…...
