Brendan PunskyandClaude Opus 5.5 ec7256a481 rexcode/arm32: MVE from llvm-mc, and VPT blocks
MVE's rows were, in the table's own words, educated estimates pending
LLVM verification: one element size per mnemonic, contiguous loads given
a 12-bit offset, the accumulating and plain reductions sharing a word,
VPT's mask in the wrong bits. On the M-profile target 2114 random words
decoded to nothing, 410 to the wrong instruction, and the Cortex-M55
object failed on 300 words.

tablegen/mve_table.odin replaces them: a flat list, every row of it read
off llvm-mc. Each instruction is assembled, each operand varied over its
range to find the bits it occupies -- which must be the bits of the
encoding the row names -- and every other bit fixed. Where one word has
several spellings (vmladav is vmlav, vldrb.s8 is vldrb.u8, vmla.s16 is
vmla.i16) the one llvm prints decodes and the others are encode-only.
VPT is VCMP opening a block, so its rows are VCMP's with the mask freed.

What MVE needed that nothing had:

  * Addresses: [Rn, #imm7] scaled by the element, by the memory element
    for the widening loads, a vector of bases [Qm, #imm], a vector of
    offsets [Rn, Qm, uxtw #s], and the interleaving loads' [Rn]!.
  * VPT and VPST masks, spelled on the mnemonic as IT's are, and the
    T or E an instruction inside the block takes, which the decoder now
    follows and the printer writes -- `vaddt.i32`. Without it a listing
    with a VPT block does not reassemble.
  * VCMP's three condition bits, lanes and lane pairs of Q registers,
    MVE's shift amounts, which lack Advanced SIMD's L bit, VCMUL's
    rotation, and the scalar long shifts' register pair -- which may not
    be SP, and where the decoder now falls back to ORRS.
  * The mnemonics llvm has and the table did not: VMULH, VADC, VMAXA,
    VMOVLB, ASRL, SQRSHRL and the rest of the scalar shifts. VMLALB and
    its kin, which do not exist, are gone.

Also on v8.1-M: VLDR and VSTR of the floating-point system registers,
BFCSEL's else target and condition, which it printed as a number,
LDC2L and STC2L on coprocessors 10 and 11 where llvm takes them.

The harness has a VPT-block suite, and the corpus mode takes VPT blocks
as units the way it takes IT blocks. tests/pipeline.odin has an MVE
golden listing, assembled by llvm-mc, that round-trips byte for byte.
Every suite now passes outright -- A32, T16, T32, IT and VPT -- with no
word decoded wrong, extra, missing or unassemblable, and every decoded
word re-encodes; so do the Cortex-M0, M7, M33 and M55 and the A15 and
A53 objects.

The last #partial switch statements in the package are exhaustive now,
and the sweep's fill values are a table.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BbUtG4UwNiMydtMW2qGhw4
2026-10-21 19:29:58 -04:00
2026-10-17 16:39:11 +01:00
2026-10-07 17:00:30 +01:00
2026-08-12 16:17:49 +01:00
2025-09-26 12:05:16 +02:00
…
2026-05-17 13:18:48 +01:00
2025-04-09 07:46:44 +11:00
2025-03-28 18:38:08 +01:00

Odin logo
The Data-Oriented Language for Sane Software Development.


The Odin Programming Language

Odin is a general-purpose programming language with distinct typing, built for high performance, modern systems, and built-in data-oriented data types. The Odin Programming Language, the C alternative for the joy of programming.

Website: https://odin-lang.org/

package main

import "core:fmt"

main :: proc() {
	program := "+ + * 😃 - /"
	accumulator := 0

	for token in program {
		switch token {
		case '+': accumulator += 1
		case '-': accumulator -= 1
		case '*': accumulator *= 2
		case '/': accumulator /= 2
		case '😃': accumulator *= accumulator
		case: // Ignore everything else
		}
	}

	fmt.printf("The program \"%s\" calculates the value %d\n",
	           program, accumulator)
}

Documentation

Getting Started

Instructions for downloading and installing the Odin compiler and libraries.

Nightly Builds

Get the latest nightly builds of Odin.

Learning Odin

Overview of Odin

An overview of the Odin programming language.

Frequently Asked Questions (FAQ)

Answers to common questions about Odin.

Packages

Documentation for all the official packages part of the core and vendor library collections.

Examples

Examples on how to write idiomatic Odin code. Shows how to accomplish specific tasks in Odin, as well as how to use packages from core and vendor.

Odin Documentation

Documentation for the Odin language itself.

Odin Discord

Get live support and talk with other Odin programmers on the Odin Discord.

Articles

The Odin Blog

The official blog of the Odin programming language, featuring announcements, news, and in-depth articles by the Odin team and guests.

Warnings

  • The Odin compiler is still in development.
S
Description
No description provided
Readme Zlib
834 MiB
0 Stars 1 Watchers 0 Forks
Languages
Odin 86.6%
C++ 9.5%
C 3.2%
Python 0.4%
Lua 0.1%