- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我没有 ISA 设计经验。我一直在读https://riscv.org/specifications/第 2 章,第 21 页。
有人可以解释为什么 RISC-V 有使用立即数的算术和逻辑指令,例如 ADDI 和 XORI,但没有类似的条件分支指令,例如 BLTI、BEQI 等。
(其中B
ranch L
ess T
han I
mmediate会将寄存器与常量进行比较并分支如果更少的话。)
我不知情的观点是,BLTI 经常用于 C 中的固定长度循环,例如:
for (int i = 0; i < 16; i++) {
...
}
为什么算术和逻辑指令比分支指令更值得立即变体?
最佳答案
分支已经需要将分支目标偏移量编码为立即数,在其中安装两个立即操作数会更困难。将它们做得更小可以使它们更适合,但也会降低指令的实用性。
这样的分支偶尔会有用,但在我看来,您高估了它的用处:在典型的循环中,不需要直接将循环计数器与其边界值进行比较,实际上,大多数循环变量甚至都没有将其放入编译后的代码。作为一个小示例(使用更高的计数来避免循环的完全展开),
int test(int *data) {
int sum = 0;
for (int i = 0; i < 255; i++)
sum += data[i];
return sum;
}
由 Clang 编译为:
test(int*): # @test(int*)
addi a2, zero, 1020
mv a3, zero
mv a1, zero
.LBB0_1: # =>This Inner Loop Header: Depth=1
add a4, a0, a3
lw a4, 0(a4)
add a1, a4, a1
addi a3, a3, 4
bne a3, a2, .LBB0_1
mv a0, a1
ret
Clang 在这里所做的是计算最终的地址,然后循环直到到达该地址,从而删除循环计数器。
这是一个有点特殊的情况,但也有其他技巧。例如,在许多情况下,循环退出测试可以转换为当寄存器递减至零时退出的循环,这很容易测试,因为 RISCV 有 bnez。如果需要,原始循环计数器可以与循环计数器共存(不参与循环退出测试),或者如果可能的话它可以再次消失。
关于assembly - 为什么RV32I包含ADDI和XORI等指令而不包含BLTI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51810450/
我想实现以下行为 - https://ezgif.com/optimize/ezgif-6-66c61806b01c.gif 这是我的 XML 文件 -
我是 Rivets.js 的新手。鉴于此代码: Toggle Dynamic headers sould be visible: {show
我对Flutter / Dart还是有点陌生,而Ive在相当长的一段时间内一直在努力解析JSON。对我来说,这似乎是一项艰巨的任务,尽管我认为我的JSON结构并不那么复杂。 您的帮助将不胜感激。
我听说银行对此软件发誓,但不了解财务软件中的用途。 假设一家公司从汤森路透等提供商处收到低延迟数据馈送,他们如何将此数据馈送分发给所有交易者,以便实时显示在他们的屏幕上。 这是Tibco RV的主要用
在运行使用 IBM Informix 4GL 和 Tibco RV 库 (libtibrv.so) 构建的应用程序时,我遇到了困难。 Informix 4GL 不是线程安全的,Tibco 总是创建一个
您好,我是 Tibco RV 的新手。读完 Tibco Rendezvous Concept 后,我仍然对传输参数感到困惑:服务、网络、守护进程。 因此从概念上讲,每台计算机上仅运行一个守护进程。
我们有 RV 消息系统发布和接收消息。最近升级了一些底层 jar - 这些是所有发布者和订阅者使用的序列化 jar。然而,似乎一些发布者仍在引用旧版本的序列化 jar,因此接收者在尝试反序列化收到的消
std::string my_func(){ return std::string("..."); } std::string 可以替换为 std::vector 或任何其他内容。一般来说,我怎么
我无法理解 Tibco 有什么特别之处。 他们的营销 Material 强调 TCP 是一种悲观的传输协议(protocol),不需要客户确认收到。这怎么可能是真的? 对我来说,Tibco 基本上是一
我希望在 Java 应用程序的性能方面比较 Tibco rv 和 Hessian。 任何让我开始的指示都值得赞赏。谢谢。 最佳答案 取决于你所说的“性能”是什么意思。 我有很多 Tibco 经验,但没
我们将 Tibco RVRD 用于 Unix 和 Windows 作为消息传递系统。只是想知道,除了从 Tibco 购买 HAWK 之外,还有没有可以测量 RVRD 压缩前后的网络使用情况? 最佳答案
我有一个 C 客户端正在监听 Tibco RV(使用 8.4.0)。源非常频繁地在 PREFIX1.* 和 PREFIX2.* 上发出消息(每秒可能多次)。 我有六个线程,每个线程监听一个特定的后缀,
我正尝试在我的应用程序中为某些消息添加附加文件。我设法做到了,但我的方法是基于带有适配器的自定义 RV,我将文件夹和文件列表发送到该适配器。我决定使用 onActivityResult。我做了这样的事
我有两个数组 truck 和 jobs。现在我必须使用这两个数组构建一个列表。这就像循环两个 for 循环。对于第一个数组(卡车)中的每个元素(id),我需要单独使用相应的作业 ID 遍历第二个数组(
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我需要解码使用 TIBCO-RV 发送的数据包并从 header 中提取字段并跳过消息正文。我无法获得任何示例或文档。有没有人知道任何可能执行此操作的开源应用程序,或者那里是否有 Wireshark
如果我使用 Matlab entropy() 函数估计标准正态随机变量向量的熵,我得到的答案在 4 左右,而 actual entropy应该是 0.5 * log(2*pi*e*sigma^2) 大
我有一个 Activity,它有一个 RecyclerView 并保存 Button。 RecyclerView 的每个项目(足球比赛)都包含一些文本(球队名称)和 EditText,用户可以在其中输
我的应用程序正在监听 Tibco RV,现在我需要切换到 WebSphere MQ。我发现这样的代码 Tibrv.open(Tibrv.IMPL_NATIVE); rvdTransport = new
我的编译器是最新的 VC++ 2013 预览版。 #include struct BigObject { ... }; void f(BigObject&&){} void f(BigObject&
我是一名优秀的程序员,十分优秀!