Idein / py-videocore

Python library for GPGPU on Raspberry Pi
MIT License
792 stars 89 forks source link

Assemble without compile #25

Closed notogawa closed 6 years ago

notogawa commented 6 years ago

This PR provides @qpu decorator without ast.parse and compile.

Inconveniently, current @qpu decorator hides file & line where raises AssembleError.

Traceback (most recent call last):
  File "test.py", line 33, in <module>
    print_qbin(boilerplate, None, int_ops, 0, 0)
  File "/home/pi/py-videocore/videocore/assembler.py", line 1176, in print_qbin
    program = assemble(program, *args, **kwargs)
  File "/home/pi/py-videocore/videocore/assembler.py", line 1170, in assemble
    f(asm, *args, **kwargs)
  File "<qpu>", line 265, in boilerplate
  File "<qpu>", line 259, in int_ops
  File "/home/pi/py-videocore/videocore/assembler.py", line 848, in _emit_add
    return self._add._emit(*args, **kwargs)
  File "/home/pi/py-videocore/videocore/assembler.py", line 530, in _emit
    self._encode_read_operands(opd1, opd2)
  File "/home/pi/py-videocore/videocore/assembler.py", line 497, in _encode_read_operands
    raise AssembleError('Too many regfile A source operand')
videocore.assembler.AssembleError: Too many regfile A source operand

By this PR, backtrace can keep this information.

Traceback (most recent call last):
  File "test.py", line 33, in <module>
    print_qbin(boilerplate, None, int_ops, 0, 0)
  File "/home/pi/py-videocore/videocore/assembler.py", line 1149, in print_qbin
    program = assemble(program, *args, **kwargs)
  File "/home/pi/py-videocore/videocore/assembler.py", line 1143, in assemble
    f(asm, *args, **kwargs)
  File "/home/pi/py-videocore/videocore/assembler.py", line 1135, in decorated
    f(asm, *args, **kwargs)
  File "test.py", line 17, in boilerplate
    f(asm)
  File "/home/pi/py-videocore/videocore/assembler.py", line 1135, in decorated
    f(asm, *args, **kwargs)
  File "test.py", line 26, in int_ops
    bxor(null, ra0, ra1)
  File "/home/pi/py-videocore/videocore/assembler.py", line 848, in _emit_add
    return self._add._emit(*args, **kwargs)
  File "/home/pi/py-videocore/videocore/assembler.py", line 530, in _emit
    self._encode_read_operands(opd1, opd2)
  File "/home/pi/py-videocore/videocore/assembler.py", line 497, in _encode_read_operands
    raise AssembleError('Too many regfile A source operand')
videocore.assembler.AssembleError: Too many regfile A source operand