From 9adc0e5bad01f34f6cf6b6d53019ead30ba49945 Mon Sep 17 00:00:00 2001 From: Wojciech Kosior Date: Mon, 14 Sep 2020 17:21:55 +0200 Subject: add ability to make non-aligned loads/stores and loads/stores of 1 or 2 bytes together with test bench --- tclasm.tcl | 108 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) (limited to 'tclasm.tcl') diff --git a/tclasm.tcl b/tclasm.tcl index 5af74c4..f80863d 100755 --- a/tclasm.tcl +++ b/tclasm.tcl @@ -105,6 +105,42 @@ proc store+ {address} { } +proc _storeb {address_part} { + puts 011111000[__to_binary $address_part 7] +} + +proc storeb {address} { + _with_im _storeb $address +} + + +proc _storeb+ {address_part} { + puts 011011000[__to_binary $address_part 7] +} + +proc storeb+ {address} { + _with_im _storeb+ $address +} + + +proc _storew {address_part} { + puts 011111010[__to_binary $address_part 7] +} + +proc storew {address} { + _with_im _storew $address +} + + +proc _storew+ {address_part} { + puts 011011010[__to_binary $address_part 7] +} + +proc storew+ {address} { + _with_im _storew+ $address +} + + proc _load {address_part} { puts 010111100[__to_binary $address_part 7] } @@ -123,6 +159,78 @@ proc load+ {address} { } +proc _loadbzx {address_part} { + puts 010111000[__to_binary $address_part 7] +} + +proc loadbzx {address} { + _with_im _loadbzx $address +} + + +proc _loadbzx+ {address_part} { + puts 010011000[__to_binary $address_part 7] +} + +proc loadbzx+ {address} { + _with_im _loadbzx+ $address +} + + +proc _loadbsx {address_part} { + puts 010111001[__to_binary $address_part 7] +} + +proc loadbsx {address} { + _with_im _loadbsx $address +} + + +proc _loadbsx+ {address_part} { + puts 010011001[__to_binary $address_part 7] +} + +proc loadbsx+ {address} { + _with_im _loadbsx+ $address +} + + +proc _loadwzx {address_part} { + puts 010111010[__to_binary $address_part 7] +} + +proc loadwzx {address} { + _with_im _loadwzx $address +} + + +proc _loadwzx+ {address_part} { + puts 010011010[__to_binary $address_part 7] +} + +proc loadwzx+ {address} { + _with_im _loadwzx+ $address +} + + +proc _loadwsx {address_part} { + puts 010111011[__to_binary $address_part 7] +} + +proc loadwsx {address} { + _with_im _loadwsx $address +} + + +proc _loadwsx+ {address_part} { + puts 010011011[__to_binary $address_part 7] +} + +proc loadwsx+ {address} { + _with_im _loadwsx+ $address +} + + # Instructions, that do not change stack size proc halt {} { -- cgit v1.2.3