To add to Ted's answer, depending on the capabilities of your platform, the XOR of bit sequences that implements addition in GF$(256)$ might be implementable as the XOR of bytes; often available as a machine instruction, even on simple processors.
On the other hand, implementing the multiplication of two elements of GF$(256)$ as multiplication of two polynomials and then taking the remainder modulo $x^8+x^4+x^3+x^2+1$ is very time-consuming. I recommend you read an excellent tutorial description by @Jyrki Lahtonen. If you have memory available, Galois field multiplication can be implemented via log tables. See here for a description of log tables, and do follow all the links there to get some ideas on how to speed up things.
Edit: added new material on multiplication
Suppose that we want to multiply binary polynomials
$c(x) = \sum_{i=0}^7 c_ix^i$ and
$d(x) = \sum_{i=0}^7 d_ix^i$, and find
the remainder after dividing the result by $m(x) = x^8+x^4+x^3+x^2+1$, that
is, we want to compute $c(x)d(x)\bmod m(x)$. Sometimes
it is convenient to embed the division by $m(x)$ into the multiplication
process, and this idea can be particularly useful in the encoder figure
shown in the question in which one polynomial (the one being fed back
in the top line of the figure) is to be multiplied
by $k$ different (fixed) polynomials $g^{(i)}(x), 0 \leq i \leq k-1$. We have
$$\begin{align*}
e(x) &= c(x)d(x) \bmod m(x)\\
&= \left(\sum_{i=0}^7 c_ix^i\right) d(x) \bmod m(x)\\
&= \left[c_0d(x) + c_1xd(x) + c_2x^2d(x) + \cdots + c_7x^7d(x)\right] \bmod m(x)\\
&= c_0d(x) + c_1[xd(x)\bmod m(x)] + c_2[x (xd(x)\bmod m(x))\bmod m(x) ]+\cdots\\
&\quad\quad\quad\quad\quad\quad\quad \cdots + c_7[x(x^6d(x)\bmod m(x)) \bmod m(x)]\\
&= \sum_{i=0}^7 c_if^{(i)}(x)
\end{align*}$$
where $f^{(0)}(x) = f(x)$ and
$f^{(i)}(x) = xf^{(i-1)}(x) \bmod m(x) = x^id(x) \bmod m(x)$. Note that the
$c_i$ are $0$ or $1$.
So, $e(x)$ is initialized to the zero polynomial and then
if $c_0 = 1$, $d(x)$ is added to $e(x)$. Then,
if $d(x)$ is not needed any more (it is not in the QR
code application being considered here), it is replaced by
$$xd(x) \bmod m(x) = \sum_{i=0}^7 d_ix^{i+1} \bmod m(x)
= \sum_{i=0}^7 (d_{i-1}\oplus d_7m_i)x^{i}.
$$
If $d(x)$ is needed elsewhere, this operation is carried out on
the copy that has been called $f(x)$. Next, if $c_1 = 1$,
the new $d(x)$ is added to the sum being accumulated in $e(x)$
and the new $d(x)$ replaced by $xd(x) \bmod d(x)$, etc. In short,
the following two-step process is executed for $k = 0, \ldots , 7$.
- If $c_k = 1$, $e(x):= e(x) + d(x)$
- $d(x) := \sum_{i=0}^7 (d_{i-1}\oplus d_7m_i)x^{i}$
to complete the GF$(256)$ multiplication in eight iterations of the
two-step process.
There are two advantages of this approach for the QR code application
First,
if $d(x)$ is chosen to be the polynomial being fed back and $c(x)$
one of the $g^{(j)}(x)$, then the coefficients of $c(x)$ are fixed
and known ahead of time, and so the first of the two steps above
can be simplified. Second, since the same $d(x)$ is being
used to multiply $k$ different $g^{(j)}(x)$'s, the update of
$d(x)$ can be shared among the $k$ different multiplications
if they are arranged to proceed in parallel instead of one
by one. Also, as a minor improvement, since the product
$e(x)$ is to be added to a $b(x)$, $e(x)$ can be initialized
to have value $b(x)$ instead of the zero polynomial.