Re: [Qemu-devel] [PATCH 01/67] decodetree: Allow !function with no input bits

2019-07-29 Thread Richard Henderson
On 7/29/19 6:43 AM, Peter Maydell wrote:
> On Fri, 26 Jul 2019 at 18:50, Richard Henderson
>  wrote:
>>
>> With this, we can have the function return a value from the DisasContext.
>>
>> Signed-off-by: Richard Henderson 
>> ---
>>  scripts/decodetree.py | 5 -
>>  tests/decode/succ_function.decode | 2 ++
>>  2 files changed, 6 insertions(+), 1 deletion(-)
>>  create mode 100644 tests/decode/succ_function.decode
>>
>> diff --git a/scripts/decodetree.py b/scripts/decodetree.py
>> index d7a59d63ac..4259d87a95 100755
>> --- a/scripts/decodetree.py
>> +++ b/scripts/decodetree.py
>> @@ -195,7 +195,10 @@ class MultiField:
>>  """Class representing a compound instruction field"""
>>  def __init__(self, subs, mask):
>>  self.subs = subs
>> -self.sign = subs[0].sign
>> +if len(subs):
>> +self.sign = subs[0].sign
>> +else:
>> +self.sign = 0
>>  self.mask = mask
>>
>>  def __str__(self):
>> diff --git a/tests/decode/succ_function.decode 
>> b/tests/decode/succ_function.decode
>> new file mode 100644
>> index 00..632a9de252
>> --- /dev/null
>> +++ b/tests/decode/succ_function.decode
>> @@ -0,0 +1,2 @@
>> +%foo  !function=foo
>> +foo    %foo
>> --
>> 2.17.1
> 
> Could you also update the documentation in docs/devel/decodetree.rst ?
> 
> This code change looks like it also now allows definitions
> of fields that specify nothing at all (ie there's no check
> that a field definition with no "unnamed_field" parts has
> a !function specifier) -- what do they do, or should they
> be made syntax errors ?

Ah good point.  Should be syntax errors.

> Is one of these functions which just returns a constant
> from no input bits still a "static int func(DisasContext *s, int x)"
> taking a pointless input argument, or is it now a
> "static int func(DisasContext *s)" ? I guess from the fact
> this code doesn't change the way a call is output that it
> is the former, but would the latter be cleaner ?

Right on both counts.  Because of how the loop in MultiField is set up, x will
always be given 0.  I'll see about cleaning this up.

In the meantime, fyi, this is used for setting the S bit for thumb1 insns,
where S=0 iff the insn is within an IT block.


r~



Re: [Qemu-devel] [PATCH 01/67] decodetree: Allow !function with no input bits

2019-07-29 Thread Peter Maydell
On Fri, 26 Jul 2019 at 18:50, Richard Henderson
 wrote:
>
> With this, we can have the function return a value from the DisasContext.
>
> Signed-off-by: Richard Henderson 
> ---
>  scripts/decodetree.py | 5 -
>  tests/decode/succ_function.decode | 2 ++
>  2 files changed, 6 insertions(+), 1 deletion(-)
>  create mode 100644 tests/decode/succ_function.decode
>
> diff --git a/scripts/decodetree.py b/scripts/decodetree.py
> index d7a59d63ac..4259d87a95 100755
> --- a/scripts/decodetree.py
> +++ b/scripts/decodetree.py
> @@ -195,7 +195,10 @@ class MultiField:
>  """Class representing a compound instruction field"""
>  def __init__(self, subs, mask):
>  self.subs = subs
> -self.sign = subs[0].sign
> +if len(subs):
> +self.sign = subs[0].sign
> +else:
> +self.sign = 0
>  self.mask = mask
>
>  def __str__(self):
> diff --git a/tests/decode/succ_function.decode 
> b/tests/decode/succ_function.decode
> new file mode 100644
> index 00..632a9de252
> --- /dev/null
> +++ b/tests/decode/succ_function.decode
> @@ -0,0 +1,2 @@
> +%foo  !function=foo
> +foo    %foo
> --
> 2.17.1

Could you also update the documentation in docs/devel/decodetree.rst ?

This code change looks like it also now allows definitions
of fields that specify nothing at all (ie there's no check
that a field definition with no "unnamed_field" parts has
a !function specifier) -- what do they do, or should they
be made syntax errors ?

Is one of these functions which just returns a constant
from no input bits still a "static int func(DisasContext *s, int x)"
taking a pointless input argument, or is it now a
"static int func(DisasContext *s)" ? I guess from the fact
this code doesn't change the way a call is output that it
is the former, but would the latter be cleaner ?
(This would probably be implemented something like allowing
FunctionField to be passed a base == None instead of
allowing MultiFields with len(subs) == 0.)

thanks
-- PMM



[Qemu-devel] [PATCH 01/67] decodetree: Allow !function with no input bits

2019-07-26 Thread Richard Henderson
With this, we can have the function return a value from the DisasContext.

Signed-off-by: Richard Henderson 
---
 scripts/decodetree.py | 5 -
 tests/decode/succ_function.decode | 2 ++
 2 files changed, 6 insertions(+), 1 deletion(-)
 create mode 100644 tests/decode/succ_function.decode

diff --git a/scripts/decodetree.py b/scripts/decodetree.py
index d7a59d63ac..4259d87a95 100755
--- a/scripts/decodetree.py
+++ b/scripts/decodetree.py
@@ -195,7 +195,10 @@ class MultiField:
 """Class representing a compound instruction field"""
 def __init__(self, subs, mask):
 self.subs = subs
-self.sign = subs[0].sign
+if len(subs):
+self.sign = subs[0].sign
+else:
+self.sign = 0
 self.mask = mask
 
 def __str__(self):
diff --git a/tests/decode/succ_function.decode 
b/tests/decode/succ_function.decode
new file mode 100644
index 00..632a9de252
--- /dev/null
+++ b/tests/decode/succ_function.decode
@@ -0,0 +1,2 @@
+%foo  !function=foo
+foo    %foo
-- 
2.17.1