---
name: "Imager::Expr::Assem"
section: "3pm"
platform: "linux"
package: "libimager-perl"
version: "1.027+dfsg-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Imager::Expr::Assem"
---

# Imager::Expr::Assem(3pm)

## NAME

```
  Imager::Expr::Assem - an assembler for producing code for the Imager
  register machine
```

## SYNOPSIS

```
  use Imager::Expr::Assem;
  my $expr = Imager::Expr->new(assem=>'...', ...)
```

## DESCRIPTION

This module is a simple Imager::Expr compiler that compiles a low-level language that has a nearly 1-to-1 relationship to the internal representation used for compiled register machine code.

### Syntax

Each line can contain multiple statements separated by semi-colons.

Anything after '#' in a line is ignored.

Types of statements:

- variable definition

  `"var"` *name*:*type*

  defines variable *name* to have *type*, which can be any of `"n"` or `"num"` for a numeric type or `"pixel"`, `"p"` or `"c"` for a pixel or color type.

  Variable names cannot include white-space.

- operators

  Operators can be split into 3 basic types, those that have a result value, those that don't and the null operator, eg. jump has no value.

  The format for operators that return a value is typically:

  *result* = *operator* *operand* ...

  and for those that don't return a value:

  *operator* *operand*

  where operator is any valid register machine operator, result is any variable defined with `"var"`, and operands are variables, constants or literals, or for jump operators, labels.

  The set operator can be simplified to:

  *result* = *operator*

  All operators maybe preceded by a label, which is any non-white-space text immediately followed by a colon (':').

## BUGS

Note that the current optimizer may produce incorrect optimization for your code, fortunately the optimizer will disable itself if you include any jump operator in your code.  A single jump to anywhere after your final `"ret"` operator can be used to disable the optimizer without slowing down your code.

There's currently no high-level code generation that can generate code with loops or real conditions.

## SEE ALSO

**Imager**(3), *transform.perl*, *regmach.c*

## AUTHOR

Tony Cook \<tony@develop-help.com\>
