Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Winch atomic loads x64 #9970

Open
wants to merge 20 commits into
base: main
Choose a base branch
from

Conversation

MarinPostma
Copy link
Contributor

this PR enable the thread feature for x64 in Winch, and implements atomic loads. This includes:

  • i32.atomic.load8_u
  • i32.atomic.load16_u
  • i32.atomic.load
  • i64.atomic.load8_u
  • i64.atomic.load16_u
  • i64.atomic.load32_u
  • i64.atomic.load

#9734

reopened from #9954 because the branch was wrong

@MarinPostma MarinPostma requested review from a team as code owners January 9, 2025 23:16
@MarinPostma MarinPostma requested review from cfallin and dicej and removed request for a team January 9, 2025 23:16
ty: WasmValType,
size: OperandSize,
sextend: Option<ExtendKind>,
atomic: bool,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Rather than a bool, which can be error-prone, could you define a small enum WasmLoadKind { Regular, Atomic } or similar and match on it in this function?

_size: OperandSize,
_sextend: Option<ExtendKind>,
) -> Result<()> {
todo!()
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you return a proper CodeGenError instead of panicking? I'm in the process of enabling spec tests for aarch64, in general recoverable errors are preferred as it makes it easier to define when a particular proposal is not fully supported in a particular backend (like threads in aarch64)

I believe we have CodeGenError::unimplemented_masm_instruction()

Comment on lines 1222 to 1223
// The guarantees of the x86-64 memory model ensure that `SeqCst`
// loads are equivalent to normal loads.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Given this comment and for the purposes of this pull request, I wonder if it's necessary to introduce a new method in the MacroAssembler. I'd prefer if possible, if we could instead extend the current load definition to take in a load_kind argument, which categorizes if the load is atomic or not, similar to Chris' comment in https://github.com/bytecodealliance/wasmtime/pull/9970/files#r1909577300, that would also simplify the indirection happening in the CodeGen module:

We could simplify to:

  • Extending emit_wasm_load to take in a load kind
  • Performing the right dispatch directly from that method to the MacroAssembler, by passing the in-scope load kind.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sure i'll do that

@MarinPostma
Copy link
Contributor Author

comments addressed

@MarinPostma
Copy link
Contributor Author

I'll fix the test tommorow.

@github-actions github-actions bot added wasmtime:api Related to the API of the `wasmtime` crate itself wasmtime:config Issues related to the configuration of Wasmtime winch Winch issues or pull requests labels Jan 10, 2025
Copy link

Subscribe to Label Action

cc @saulecabrera

This issue or pull request has been labeled: "wasmtime:api", "wasmtime:config", "winch"

Thus the following users have been cc'd because of the following labels:

  • saulecabrera: winch

To subscribe or unsubscribe from this label, edit the .github/subscribe-to-label.json configuration file.

Learn more.

Copy link

Label Messager: wasmtime:config

It looks like you are changing Wasmtime's configuration options. Make sure to
complete this check list:

  • If you added a new Config method, you wrote extensive documentation for
    it.

    Our documentation should be of the following form:

    Short, simple summary sentence.
    
    More details. These details can be multiple paragraphs. There should be
    information about not just the method, but its parameters and results as
    well.
    
    Is this method fallible? If so, when can it return an error?
    
    Can this method panic? If so, when does it panic?
    
    # Example
    
    Optional example here.
    
  • If you added a new Config method, or modified an existing one, you
    ensured that this configuration is exercised by the fuzz targets.

    For example, if you expose a new strategy for allocating the next instance
    slot inside the pooling allocator, you should ensure that at least one of our
    fuzz targets exercises that new strategy.

    Often, all that is required of you is to ensure that there is a knob for this
    configuration option in wasmtime_fuzzing::Config (or one
    of its nested structs).

    Rarely, this may require authoring a new fuzz target to specifically test this
    configuration. See our docs on fuzzing for more details.

  • If you are enabling a configuration option by default, make sure that it
    has been fuzzed for at least two weeks before turning it on by default.


To modify this label's message, edit the .github/label-messager/wasmtime-config.md file.

To add new label messages or remove existing label messages, edit the
.github/label-messager.json configuration file.

Learn more.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
wasmtime:api Related to the API of the `wasmtime` crate itself wasmtime:config Issues related to the configuration of Wasmtime winch Winch issues or pull requests
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants