Commit Graph

260 Commits

Author SHA1 Message Date
Andrew Woloszyn
4274f93065 Fixed UTF-8 encoding issues on windows.
Also cleaned up some warnings related to implicit size_t/uint64_t
conversions.
2015-10-26 12:55:33 -04:00
Andrew Woloszyn
157e41bf57 Added type tracking to the disassembler.
TODO: Actually use the tracked types to make sure that we print out
values correctly.
2015-10-26 12:55:33 -04:00
David Neto
d16ee3b428 Update readme: Support OpenCL, UTF-8 literal strings 2015-10-26 12:55:33 -04:00
David Neto
4942a318f4 Remaining tests for OpenCL extended instructions. 2015-10-26 12:55:33 -04:00
David Neto
445ce4401d Add operand type for extension instruction number
This is required to support extended instructions that
have literal numbers as operands.  An example is OpenCL's
vloadn.

The previous code in the assembler assumed that *any* literal
number argument in any part of an OpExtInst must be the name
of the extended instruction.  That's true only for the first
literal number argument.
2015-10-26 12:55:33 -04:00
David Neto
1bb8b70341 Use literal integers for OpenCL extended instructions. 2015-10-26 12:55:33 -04:00
David Neto
21c4ad4b22 Add OpenCL extended instructions.
Versions 1.2, 2.0, and 2.1 all use the same
extended instruction list.

Updated the source code patch for the SPIR-V doc generator,
so it can both generate the core syntax table, and also the
OpenCL extended instructions table.

Tested the Math and Common functions.
TODO: test the remaining entries.
2015-10-26 12:55:33 -04:00
Andrew Woloszyn
ccc210b4cc Some minor clean-ups to binary.{h,cpp}.
Removed spvBinaryDecodeOpcode and spvBinaryDecodeOperand from the public
interface since they were only ever used in binary.cpp.

Replaced the usage of spv_operand_table_t and it's ilk with the
AssemblyGrammar to reduce the number of passed parameters.

Fixed typo in comment.
2015-10-26 12:55:33 -04:00
Lei Zhang
6483bd7132 Enforce suitable literal number operands to be unsigned integers.
Except for OpConstant and OpSpecConstant, all other literal number
operands are indeed unsigned integers. So,

* Rename all *LITERAL_NUMBER* operand types to *LITERAL_INTEGER*.
* Expect unsigned integers for *LITERAL_INTEGER* operands.
* Keep MULITPLE_WORD_LITERAL untouched since it is only used by
  OpConstant and OpSpecConstant.

And we want to provide the capability to specify floating-point
numbers after !<integer> in the alternate parsing mode. So,
OPTIONAL_LITERAL_NUMBER is reserved for OPTIONAL_CIV.
2015-10-26 12:55:33 -04:00
David Neto
5d65ea726c Git ignore compile_commands.json in root directory.
Useful for standalone development of SPIR-V Tools with
Ninja and YouCompleteMe.
2015-10-26 12:55:33 -04:00
Lei Zhang
62f92cdae6 Use normal string instead of raw string for simple strings. 2015-10-26 12:55:33 -04:00
Lei Zhang
4c2db8347e Simplify methods for compilation failure in test framework.
Remove  CompileWithFormatFailure() and make CompileFailure() accept
a default argument.
2015-10-26 12:55:33 -04:00
David Neto
005a11a4ac Use SPIRV_PERF=1 when performance tuning.
It tells the compiler to keep frame pointers, so you have good
call stacks in your profiles.
2015-10-26 12:55:33 -04:00
David Neto
980b7cb95e Avoid strlen in a loop, for speed. 2015-10-26 12:55:33 -04:00
David Neto
9e11c7d301 Fix Android build: use std::numeric_limits<T>::max and friends
UINT32_MAX and friends are not available.
2015-10-26 12:55:33 -04:00
David Neto
470405e0ed Add disabled tests for disassembler literal emission
Currently, negative numbers are printed as if they were
first statically cast to unsigned.
2015-10-26 12:55:33 -04:00
Andrew Woloszyn
e59e6b72f9 Added proper string escaping to the disassembler.
The disassembler now generates correct string when encountering
quotes and slashes.
2015-10-26 12:55:33 -04:00
David Neto
51013d15ee SPV_FAILED_MATCH error mutes DiagnosticStream.
The DiagnosticStream will not emit the accumulated message
text if the error is SPV_FAILED_MATCH.

Change various interfaces to accept the intended error
code instead of a boolean "is_optional".  This allows
us to avoid repeating the following type of logic deep
inside helper methods:

  if (is_optional) return SPV_FAILED_MATCH;
  return diagnostic() << " message text ";
2015-10-26 12:55:33 -04:00
Andrew Woloszyn
f08c679e97 Removed un-needed comments and fixed merge issue. 2015-10-26 12:55:33 -04:00
Andrew Woloszyn
3e69cd1b9f Updated string escaping in the assembler.
Strings are now escaped correctly when assembling.
TODO dissassembler support for strange strings (newlines for example).
2015-10-26 12:55:33 -04:00
David Neto
daf493b202 Update readme. Long instructions, literal number encoding 2015-10-26 12:55:33 -04:00
Dejan Mircevski
497b226c68 Add negative-coverage location to operand-class-test-coverage.csv. 2015-10-26 12:55:33 -04:00
David Neto
78e677b5cd Parse and encode literal integers to the right width
Affects OpConstant, and OpSwitch.

Adds constant libspirv::kUnknownType for readability.

Adds tests for hexadecimal number parsing.

Updates syntax.md to describe hex parsing, including
sign extension.
2015-10-26 12:55:33 -04:00
David Neto
6274120eb9 Add AssemblyContext::parseNumber
It parses a text string for a value of a given target type.
2015-10-26 12:55:33 -04:00
David Neto
ac508b0d80 DiagnosticStream can convert to a stored error code
Use this to shorten error return code in the assembler.

For example, change this:

   if (error = something()) {
      diagnostic() << " Bad integer literal " << value;
      return SPV_ERROR_INVALID_VALUE;
   }

to this:

   if (error = something())
      return diagnostic() << " Bad integer literal " << value;

Also shorten code due to the fact that binaryEncodeU32 and
binaryCodeU64 can't fail (short of failure to expand a std::vector).
2015-10-26 12:55:33 -04:00
Dejan Mircevski
cc936dc613 Negative test for FunctionControl. 2015-10-26 12:55:33 -04:00
Dejan Mircevski
2fc334c701 Negative test for LoopControl. 2015-10-26 12:55:33 -04:00
Dejan Mircevski
8386c57d0c Negative test for SelectionControl. 2015-10-26 12:55:33 -04:00
Dejan Mircevski
c002213d95 Negative test for GroupOperation. 2015-10-26 12:55:33 -04:00
Dejan Mircevski
9d0c813547 Negative test for LinkageType. 2015-10-26 12:55:33 -04:00
Dejan Mircevski
d7b0f83bd1 Negative test for BuiltIn. 2015-10-26 12:55:33 -04:00
Dejan Mircevski
10fa49cd4b Negative test for AccessQualifier. 2015-10-26 12:55:33 -04:00
Dejan Mircevski
212ba355a6 Negative test for FuncParamAttr. 2015-10-26 12:55:33 -04:00
Dejan Mircevski
374616d98f Negative test for Decoration. 2015-10-26 12:55:33 -04:00
Dejan Mircevski
c0eb225044 Negative test for FPRoundingMode. 2015-10-26 12:55:33 -04:00
Dejan Mircevski
355cc0c678 Negative test for FPFastMathMode. 2015-10-26 12:55:33 -04:00
Dejan Mircevski
971b344150 Negative test for ImageFormat. 2015-10-26 12:55:33 -04:00
Dejan Mircevski
d062f8b097 Make compilation input strings const.
Also rerun clang-format.
2015-10-26 12:55:33 -04:00
Dejan Mircevski
57c4398759 Negative test for SamplerFilterMode. 2015-10-26 12:55:33 -04:00
Dejan Mircevski
1e128260cb Negative test for SamplerAddressingMode. 2015-10-26 12:55:33 -04:00
Dejan Mircevski
f8e091af3d Clarify handling of OperandImageOperands. 2015-10-26 12:55:33 -04:00
Dejan Mircevski
63af6fd409 Negative test for ImageOperands. 2015-10-26 12:55:33 -04:00
Dejan Mircevski
2fd3792c3a Negative test for Dim. 2015-10-26 12:55:33 -04:00
Dejan Mircevski
52ff534040 Test OpTypeForwardPointer. 2015-10-26 12:55:33 -04:00
Andrew Woloszyn
537e77663d Added tracking to types and validated certain instructions.
We need to know how to generate correct SPIRV for cases like
OpConstant %int64 42 since the current parser will encode the 42 as a
32-bit value incorrectly.

This change is the first of a pair. This one tracks types, and makes
sure that OpConstant and OpSpecConstant are only ever called with
Integer or Float types, and OpSwitch is only called with integer
generating values.
2015-10-26 12:55:33 -04:00
David Neto
9db3a53897 Remove spv_opcode_flags_t and flags fields.
The flags fields in both spv_opcode_desc_t and spv_operand_desc_t
are redundant with the capabilities mask field in the same
structure.
2015-10-26 12:55:33 -04:00
Dejan Mircevski
725cc2a2df Negative test for ExecutionMode. 2015-10-26 12:55:33 -04:00
Dejan Mircevski
865034263d Negative test for AddressingModel, MemoryModel. 2015-10-26 12:55:33 -04:00
Dejan Mircevski
2d6796d45d Negative test for ExecutionModel. 2015-10-26 12:55:33 -04:00
Dejan Mircevski
d2c81cf34a Negative test for SourceLanguage.
Also, use "class" instead of "type" in the coverage CSV.
2015-10-26 12:55:33 -04:00