---input--- .const .u32 foo = 42; .global .u32 bar[] = { 2, 3, 5 }; .global .u32 p1 = foo; // offset of foo in .const space .global .u32 p2 = generic(foo); // generic address of foo // array of generic-address pointers to elements of bar .global .u32 parr[] = { generic(bar), generic(bar)+4, generic(bar)+8 }; // examples using mask() operator are pruned for brevity .global .u8 addr[] = {0xff(foo), 0xff00(foo), 0xff0000(foo), ...}; .global .u8 addr2[] = {0xff(foo+4), 0xff00(foo+4), 0xff0000(foo+4),...} .global .u8 addr3[] = {0xff(generic(foo)), 0xff00(generic(foo)),...} .global .u8 addr4[] = {0xff(generic(foo)+4), 0xff00(generic(foo)+4),...} // mask() operator with integer const expression .global .u8 addr5[] = { 0xFF(1000 + 546), 0xFF00(131187), ...}; ---tokens--- '.const' Keyword.Pseudo ' ' Text.Whitespace '.u32' Keyword.Type ' ' Text.Whitespace 'foo' Name.Variable ' ' Text.Whitespace '=' Punctuation ' ' Text.Whitespace '42' Literal.Number ';' Punctuation '\n' Text.Whitespace '.global' Keyword.Pseudo ' ' Text.Whitespace '.u32' Keyword.Type ' ' Text.Whitespace 'bar' Keyword '[' Punctuation ']' Punctuation ' ' Text.Whitespace '=' Punctuation ' ' Text.Whitespace '{' Punctuation ' ' Text.Whitespace '2' Literal.Number ',' Operator ' ' Text.Whitespace '3' Literal.Number ',' Operator ' ' Text.Whitespace '5' Literal.Number ' ' Text.Whitespace '}' Punctuation ';' Punctuation '\n' Text.Whitespace '.global' Keyword.Pseudo ' ' Text.Whitespace '.u32' Keyword.Type ' ' Text.Whitespace 'p1' Name.Variable ' ' Text.Whitespace '=' Punctuation ' ' Text.Whitespace 'foo' Name.Variable ';' Punctuation ' ' Text.Whitespace '// offset of foo in .const space\n' Comment '.global' Keyword.Pseudo ' ' Text.Whitespace '.u32' Keyword.Type ' ' Text.Whitespace 'p2' Name.Variable ' ' Text.Whitespace '=' Punctuation ' ' Text.Whitespace 'generic' Name.Variable '(' Punctuation 'foo' Name.Variable ')' Punctuation ';' Punctuation ' ' Text.Whitespace '// generic address of foo\n' Comment '\n' Text.Whitespace '// array of generic-address pointers to elements of bar\n' Comment '.global' Keyword.Pseudo ' ' Text.Whitespace '.u32' Keyword.Type ' ' Text.Whitespace 'parr' Name.Variable '[' Punctuation ']' Punctuation ' ' Text.Whitespace '=' Punctuation ' ' Text.Whitespace '{' Punctuation ' ' Text.Whitespace 'generic' Name.Variable '(' Punctuation 'bar' Keyword ')' Punctuation ',' Operator ' ' Text.Whitespace 'generic' Name.Variable '(' Punctuation 'bar' Keyword ')' Punctuation '+' Operator '4' Literal.Number ',' Operator '\n' Text.Whitespace 'generic' Name.Variable '(' Punctuation 'bar' Keyword ')' Punctuation '+' Operator '8' Literal.Number ' ' Text.Whitespace '}' Punctuation ';' Punctuation '\n\n' Text.Whitespace '// examples using mask() operator are pruned for brevity\n' Comment '.global' Keyword.Pseudo ' ' Text.Whitespace '.u8' Keyword.Type ' ' Text.Whitespace 'add' Keyword 'r' Name.Variable '[' Punctuation ']' Punctuation ' ' Text.Whitespace '=' Punctuation ' ' Text.Whitespace '{' Punctuation '0xff' Literal.Number '(' Punctuation 'foo' Name.Variable ')' Punctuation ',' Operator ' ' Text.Whitespace '0xff00' Literal.Number '(' Punctuation 'foo' Name.Variable ')' Punctuation ',' Operator ' ' Text.Whitespace '0xff0000' Literal.Number '(' Punctuation 'foo' Name.Variable ')' Punctuation ',' Operator ' ' Text.Whitespace '...' Name.Variable '}' Punctuation ';' Punctuation '\n\n' Text.Whitespace '.global' Keyword.Pseudo ' ' Text.Whitespace '.u8' Keyword.Type ' ' Text.Whitespace 'add' Keyword 'r2' Name.Variable '[' Punctuation ']' Punctuation ' ' Text.Whitespace '=' Punctuation ' ' Text.Whitespace '{' Punctuation '0xff' Literal.Number '(' Punctuation 'foo' Name.Variable '+' Operator '4' Literal.Number ')' Punctuation ',' Operator ' ' Text.Whitespace '0xff00' Literal.Number '(' Punctuation 'foo' Name.Variable '+' Operator '4' Literal.Number ')' Punctuation ',' Operator ' ' Text.Whitespace '0xff0000' Literal.Number '(' Punctuation 'foo' Name.Variable '+' Operator '4' Literal.Number ')' Punctuation ',' Operator '...' Name.Variable '}' Punctuation '\n\n' Text.Whitespace '.global' Keyword.Pseudo ' ' Text.Whitespace '.u8' Keyword.Type ' ' Text.Whitespace 'add' Keyword 'r3' Name.Variable '[' Punctuation ']' Punctuation ' ' Text.Whitespace '=' Punctuation ' ' Text.Whitespace '{' Punctuation '0xff' Literal.Number '(' Punctuation 'generic' Name.Variable '(' Punctuation 'foo' Name.Variable ')' Punctuation ')' Punctuation ',' Operator ' ' Text.Whitespace '0xff00' Literal.Number '(' Punctuation 'generic' Name.Variable '(' Punctuation 'foo' Name.Variable ')' Punctuation ')' Punctuation ',' Operator '...' Name.Variable '}' Punctuation '\n\n' Text.Whitespace '.global' Keyword.Pseudo ' ' Text.Whitespace '.u8' Keyword.Type ' ' Text.Whitespace 'add' Keyword 'r4' Name.Variable '[' Punctuation ']' Punctuation ' ' Text.Whitespace '=' Punctuation ' ' Text.Whitespace '{' Punctuation '0xff' Literal.Number '(' Punctuation 'generic' Name.Variable '(' Punctuation 'foo' Name.Variable ')' Punctuation '+' Operator '4' Literal.Number ')' Punctuation ',' Operator ' ' Text.Whitespace '0xff00' Literal.Number '(' Punctuation 'generic' Name.Variable '(' Punctuation 'foo' Name.Variable ')' Punctuation '+' Operator '4' Literal.Number ')' Punctuation ',' Operator '...' Name.Variable '}' Punctuation '\n\n' Text.Whitespace '// mask() operator with integer const expression\n' Comment '.global' Keyword.Pseudo ' ' Text.Whitespace '.u8' Keyword.Type ' ' Text.Whitespace 'add' Keyword 'r5' Name.Variable '[' Punctuation ']' Punctuation ' ' Text.Whitespace '=' Punctuation ' ' Text.Whitespace '{' Punctuation ' ' Text.Whitespace '0xFF' Literal.Number '(' Punctuation '1000' Literal.Number ' ' Text.Whitespace '+' Operator ' ' Text.Whitespace '546' Literal.Number ')' Punctuation ',' Operator ' ' Text.Whitespace '0xFF00' Literal.Number '(' Punctuation '131187' Literal.Number ')' Punctuation ',' Operator ' ' Text.Whitespace '...' Name.Variable '}' Punctuation ';' Punctuation '\n' Text.Whitespace