Thanks for the analysis Phillip.  In fact the constructors guarded by SC_FX_EXCLUDE_OTHER are already explicit, so the only relevant thing my side comment raised was the existence of SC_FX_EXCLUDE_OTHER. 
Andy
On Dec 3, 2010, at 9:01 AM, Philipp A. Hartmann wrote:
> John, Andy, All,
> 
> sorry for the delayed reply.  Find a summary of changes and a response
> to Andy's comments below.
> 
> Yes, John, the only proposed changes to the LRM would be to make the
> constructors of the classes sc_fxval and sc_fxval_fast explicit for the
> following parameter overloads:
> 
>  int
>  unsigned int
>  long
>  unsigned long
>  float
>  double
>  const char*
> 
>  Potentially add a note, that (for backwards compatibility) an
> implementation can add honour a #define SC_FXVAL_IMPLICIT_CONV to keep
> the old behaviour.  This has been suggested by Dave and is certainly a
> good idea.  I'm not sure, whether this needs to be included in the LRM,
> though.
> 
> Secondly, Andy had a comment on the issue off-list:
> 
> On 02/12/10 17:08, Andy Goodrich wrote:
>> another possibility would be to make the constructors guarded by
>> SC_FX_EXCLUDE_OTHER explicit. Those are the ones that are causing the
>> issue I believe. If you define SC_INCLUDE_FX and SC_FX_EXCLUDE_OTHER
>> then the problem does not occur. The question is, which do we want to
>> be explicit?
> 
> NB: SC_FX_EXCLUDE_OTHER is a define that is honoured by the ref-sim to
>    exclude the conversion constructors from sc_uint et.al. completely
>    from sc_fxval.
> 
> As I see the case, Andy is right for the initial ambiguity that has been
> raised by Bishnupriya:
> 
>  {
>    sc_uint<8>    A,B;
>    sc_uint<8>    C,D;
>    A = B + C * D;     // works with SC_FX_EXCLUDE_OTHER
>  }
> 
> Unfortunately, with this define mixed integer/fixed-point expressions
> then break with a similar ambiguity:
> 
>  {
>    sc_fixed<8,2> A,B;
>    sc_uint<8>    C,D;
>    A = B + C * D;    // fails with SC_FX_EXCLUDE_OTHER
>  }
> 
>  AFAICS, the constructors guarded by SC_FX_EXCLUDE_OTHER are already
> explicit (in the LRM and in the ref-sim).  Changing these to be implicit
> as well does not help fixing things.
> 
>  Consequently, I would still propose to implement the above change to
> make the remaining "from-builtin" sc_fxval constructors explicit, with
> the drawback that a minor backwards compatibility issue is introduced,
> regarding copy-initialisation:
> 
>  sc_fxval v = 10;
> 
> Such definitions have to be changed to one of the following variants:
> 
>  sc_fxval v(10);            // direct initialisation
>  sc_fxval v = sc_fxval(10); // explicit cast
>  sc_fxval v; v = 10;        // separate construction + assignment
> 
> With an additional preprocessor directive to enable the old behaviour, I
> think the benefits are definitely outweighing the cost here.
> 
> Thoughts?
> 
> Greetings from Oldenburg,
>  Philipp
> 
> On 03/12/10 05:43, john.aynsley@doulos.com wrote:
>> Philipp,
>> 
>> Could you please summarize for me the LRM changes needed here? Is it literally just two "explicit"s?
>> 
>> Thanks,
>> 
>> John A
>> 
>> -----"Philipp A. Hartmann" <philipp.hartmann@offis.de> wrote: -----
>> To: Andy Goodrich <acg@forteds.com>
>> From: "Philipp A. Hartmann" <philipp.hartmann@offis.de>
>> Date: 12/01/2010 10:23PM
>> Cc: John Aynsley <john.aynsley@doulos.com>, Bishnupriya Bhattacharya <bpriya@cadence.com>, David Long <david.long@doulos.com>, "Michael (Mac) McNamara" <mcnamara@cadence.com>, SystemC P1666 Technical <systemc-p1666-technical@eda.org>
>> Subject: Ambiguities in certain combinations of SystemC sc_int/sc_fixed datatypes
>> 
>> Andy,
>> 
>> on the P1666 technical reflector [1], Bishnupriya brought up a quite
>> long-standing issue related to unwanted operator ambiguities for
>> sc_(u)int(_base), that can arise when enabling the fixed-point types via
>> SC_INCLUDE_FX.
>> 
>>  As one of the possible solutions, I have then suggested to make the
>> conversion constructors from the builtin types of sc_fxval(_fast)
>> explicit, since seems to fix the issue (with some minor backwards
>> compatibility limitations), see [2] for a summary.
>> 
>>  There has been a side discussion with Mac, that there may be other
>> cases of ambiguities (longer expressions, purely containing sc_fixed),
>> which I could not reproduce with the reference simulator.
>> 
>>  Attached is an archive with a patch against the latest OSCI internal
>> version of the reference implementation providing the proposed change.
>> Would you please have a look at this issue and the proposed solution?
>> I'm afraid, that we might be missing some subtle corner case here...
>> 
>> Thanks,
>>  Philipp
>> 
>> 1.
>> http://www.eda.org/systemc/systemc-p1666/systemc-p1666-technical/hm/0815.html
>> 2.
>> http://www.eda.org/systemc/systemc-p1666/systemc-p1666-technical/hm/0828.html
>> 
>> Contents of attached archive:
>> 
>> sc_fxval_test.cpp
>> 
>>  quick test for some of the problematic expressions
>> 
>> 0001-sc_fxval-_fast-make-ctors-explicit.patch
>> 
>>  patch to make some of the constructors of sc_fxval(_fast)
>>  explicit, unless SC_FXVAL_IMPLICIT_CONV is defined
>>  (for backwards compatibility, as suggested by David).
>> 
>> 0001-fix-tests-for-sc_fxval-explicit-constructors.patch
>> 
>>  patch against the SystemC regression tests to fix the
>>  backwards compatibility issues in some of the fixed-point
>>  tests
>> 
>> 0002-sc_dt-div_scfx_rep-fix-default-max-word-length.patch
>> 
>>  patch, fixing a bug in SystemC 2.3.09jul10_beta, where
>>  the default argument of the sc_dt::div_scfx_rep function
>>  has been broken (unrelated)
>> 
> 
> 
> -- 
> Philipp A. Hartmann
> Hardware/Software Design Methodology Group
> 
> OFFIS Institute for Information Technology
> R&D Division Transportation · FuE-Bereich Verkehr
> Escherweg 2 · 26121 Oldenburg · Germany · http://offis.de/en/
> Phone/Fax: +49-441-9722-420/282 · PGP: 0x9161A5C0 · Skype: phi.har
> 
-- This message has been scanned for viruses and dangerous content by MailScanner, and is believed to be clean.Received on Fri Dec 3 06:10:54 2010
This archive was generated by hypermail 2.1.8 : Fri Dec 03 2010 - 06:10:55 PST