Giter Club home page Giter Club logo

Comments (4)

johnwinans avatar johnwinans commented on August 23, 2024

The 'rt' register is how you tell the assembler which register to use to hold the temporary value when calculating the target address.

The closest thing to skipping the 'rt' and 'storing direct' would be this: sw rd, offset(x0)

HOWEVER, the offset value only has 12 bits and therefore the target address can only refer to addresses in the first (and last) 2096 (0x800) bytes.

To express such a thing in your program you could do this:

sw		t4, %lo(val)(x0)

....
val:
.word 0

Be careful! The assembler is not going to complain if the 'val' in this example is not in the required address range. You will have to plan such things carefully.

from riscv-asm-manual.

clx782782 avatar clx782782 commented on August 23, 2024

Got it!
Actually I've seen one asm example in https://github.com/riscv/riscv-tests/tree/67500e2f200619bcd8ca3a8e5d396ea3021a7e27#test-virtual-machines :

#include "riscv_test.h"

RVTEST_RV64U        # Define TVM used by program.

# Test code region.
RVTEST_CODE_BEGIN   # Start of test code.
        lw      x2, testdata
        addi    x2, 1         # Should be 42 into $2.
        sw      x2, result    # Store result into memory overwriting 1s.
        li      x3, 42        # Desired result.
        bne     x2, x3, fail  # Fail out if doesn't match.
        RVTEST_PASS           # Signal success.
fail:
        RVTEST_FAIL
RVTEST_CODE_END     # End of test code.

# Input data section.
# This section is optional, and this data is NOT saved in the output.
.data
        .align 3
testdata:
        .dword 41

# Output data section.
RVTEST_DATA_BEGIN   # Start of test output data region.
        .align 3
result:
        .dword -1
RVTEST_DATA_END     # End of test output data region.

I was trying to build the whole asm program but gcc told me sw x2, result was illegal.I modified it to:sw x2, result,t2 and I successfully built the program.

You say "rt" will "hold the temporary value",so I wonder if any other registers which not being used in the program could replace "t2" such as a0-a7,s0-s11? Or we just could use some of t0-t6 which have not been used?

from riscv-asm-manual.

johnwinans avatar johnwinans commented on August 23, 2024

When you use the 'sw' instruction like this, it is treated as a 'pseudo instruction'. As such, it is converted into one or more actual instructions according to the rules on page 110 of the ISA manual here:

RISC-V ISA Manual

It does not mention any restrictions on the values for rt.

from riscv-asm-manual.

clx782782 avatar clx782782 commented on August 23, 2024

Oh,I finally know that there are one "basic instruction" and one "pseudo instruction" for sw.

Thanks a lot!

from riscv-asm-manual.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.