Comments (5)
This can be done with asserts, but I'd like it if there was shorter syntax that had the same effect.
assert(imm >= 0)
assert(imm <= 0xFF) ; assert that this unsigned(!) byte is within range.
assert(imm <= 0x7f)
assert(imm >= !0x7f) ; assert that this signed(!) byte is within range.
from customasm.
Oh, yeah! This was definitely in the plans. My planned syntax for this would be:
example {value: u8} -> 0x10 @ value[7:0] ; unsigned 8-bit constraint, accepts 0x00 through 0xff
example {value: s8} -> 0x10 @ value[7:0] ; signed 8-bit constraint, accepts -0x80 through 0x7f
(Perhaps even allowing you to suppress the [7:0]
slice syntax)
These would throw errors similarly to the asserts moonheart08 posted above. But right now, you must use explicit asserts to get this behavior. I'll try to work on this feature as soon as possible!
from customasm.
Done! You can now use this syntax, and even elide slices on argument usage. There is a third parameter type too:
example {value: u8} -> 0x10 @ value ; unsigned 8-bit constraint, accepts 0x00 through 0xff
example {value: s8} -> 0x10 @ value ; signed 8-bit constraint, accepts -0x80 through 0x7f
example {value: i8} -> 0x10 @ value ; signed/unsigned 8-bit constraint, accepts -0x80 through 0xff
And, of course, you can use whichever number of bits you like, such as {value: s32}
or {value: u3}
.
from customasm.
This can be done with asserts, but I'd like it if there was shorter syntax that had the same effect.
assert(imm >= 0) assert(imm <= 0xFF) ; assert that this unsigned(!) byte is within range.
assert(imm <= 0x7f) assert(imm >= !0x7f) ; assert that this signed(!) byte is within range.
I didn't think of this one, that's pretty clever :)
Oh, yeah! This was definitely in the plans. My planned syntax for this would be:
example {value: u8} -> 0x10 @ value[7:0] ; unsigned 8-bit constraint, accepts 0x00 through 0xff example {value: s8} -> 0x10 @ value[7:0] ; signed 8-bit constraint, accepts -0x80 through 0x7f(Perhaps even allowing you to suppress the
[7:0]
slice syntax)These would throw errors similarly to the asserts moonheart08 posted above. But right now, you must use explicit asserts to get this behavior. I'll try to work on this feature as soon as possible!
Oh that's great! This syntax is far better that I proposed.
If you need help on specific implementation points, I'd be happy to help if I can :)
from customasm.
Oh that was quick :D
Thanks a lot for this improvement!
from customasm.
Related Issues (20)
- le() causes negative numbers to become positive HOT 3
- feature request: api for own rust programs HOT 1
- Include order not respected HOT 7
- #fill raises 'expected expression' error HOT 7
- Allow outputting banks to different output files
- Support for 32bit and 64bit floats HOT 1
- "no match found for instruction" when mnemonic is less than 4 characters long (and has a subruledef directly next to it) HOT 4
- pattern matching error: whitespace and constants after mnemomics cause pattern matching rules to be broken HOT 2
- Improve error message HOT 1
- No match for instruction with negative numbers HOT 7
- Feature request: allow use of \x in multi byte character string functions HOT 2
- Allow Constants as Slice Sizes HOT 1
- Apparently unable to handle parameter without preceeding whitespace HOT 5
- Feature request: functions with variable numbers of arguments
- bank start/end/firstfree symbols
- Feature Request: Packed Instructions HOT 2
- Feature request: fill bank with custom value instead of zeros HOT 3
- Failure to match when a number is followed by a % HOT 3
- Allow aliases for token substitution HOT 8
- Is it possible to parse statements like .data or .asciz? HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from customasm.